move_uploaded_file donne une erreur “Échec de l’ouverture du stream: Autorisation refusée” après toutes les configurations effectuées

Je continue à recevoir cette erreur en essayant de configurer le répertoire de téléchargement avec Apache 2.2 et PHP 5.3 sur CentOS.

Dans php.ini:

upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/ 

Dans httpd.conf:

 Directory /var/www/html/mysite/tmp_file_upload/> Options -Indexes AllowOverride None Order allow,deny Allow from all   Options -Indexes  

Autorisations de répertoire CentOS:

 drwxrwxr-x 2 root root 4096 Nov 11 10:01 images drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload 

Peu importe ce que je fais, je continue à recevoir cette erreur de PHP lorsque je télécharge le fichier:

Attention: move_uploaded_file (images / robot.jpg): Échec de l’ouverture du stream: autorisation refusée dans /var/www/html/mysite/process.php sur la ligne 78

Attention: move_uploaded_file (): Impossible de déplacer ‘/ tmp / phpsKD2Qm’ vers ‘images / robot.jpg’ dans /var/www/html/mysite/process.php sur la ligne 78

Comme vous pouvez le voir, la configuration du fichier php.ini n’a jamais été prise en compte pour le fichier de téléchargement.

Que fais-je mal ici?

C’est parce que les images et tmp_file_upload ne sont accessibles en écriture que par root utilisateur root . Pour que le téléchargement fonctionne, nous devons rendre le propriétaire de ces dossiers identique au propriétaire du processus httpd OU les rendre accessibles en écriture globalement (mauvaise pratique).

  1. Vérifiez le propriétaire du processus apache: $ps aux | grep httpd $ps aux | grep httpd . La première colonne sera le propriétaire généralement ce ne sera nobody
  2. Changez le propriétaire des images et tmp_file_upload pour qu’il nobody devienne nobody ou quel que soit le propriétaire trouvé à l’étape 1.

     $sudo chown nobody /var/www/html/mysite/images/ $sudo chown nobody /var/www/html/mysite/tmp_file_upload/ 
  3. Les images tmp_file_upload et tmp_file_upload maintenant être accessibles en écriture par le propriétaire, si nécessaire [Il semble que vous ayez déjà cette tmp_file_upload ]. Mentionné dans @Dmitry Teplyakov réponse.

     $ sudo chmod -R 0755 /var/www/html/mysite/images/ $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/ 
  4. Pour plus de détails sur la raison de ce comportement, consultez le manuel http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir , notez qu’il parle également de la directive open_basedir .

Vous pouvez également exécuter ce script pour connaître le propriétaire du processus Apache:

Et puis changez le propriétaire du répertoire de destination pour ce que vous avez. Utilisez la commande:

 chown user destination_dir 

Et puis utilisez la commande

 chmod 755 destination_dir 

pour modifier l’autorisation du répertoire de destination.

Si vous avez Mac OS X, accédez à la racine du fichier ou au dossier de votre site Web.

Cliquez ensuite avec le bouton droit de la souris, accédez aux informations, allez tout en bas ( Partage et permissions ), ouvrez-le, modifiez tout en lecture seule pour lire et écrire. Assurez-vous d’ouvrir le cadenas, allez à l’icône de configuration et choisissez Appliquer aux éléments joints …

Modifier les permissions pour ce dossier

# chmod -R 0755 /var/www/html/mysite/images/

J’ai rencontré ce problème même après avoir déjà réussi à composer compositeur. J’ai mis à jour le composeur, et lors de l’ composer install ou php composer.phar install j’ai eu:

… n’a pas réussi à ouvrir le stream: Autorisation refusée …

Après de nombreuses recherches, il est apparu que les réponses précédentes concernant la modification des permissions pour le dossier fonctionnaient. Ce ne sont que des répertoires légèrement différents maintenant.

Dans mon installation, sous OS X, le fichier cache se trouve dans /Users/[USER]/.composer/cache et je rencontrais des problèmes car le fichier cache appartenait à root. La modification récursive de la propriété de ‘.composer’ à mon utilisateur a résolu le problème.

C’est ce que j’ai fait:

 sudo chown -R [USER] cache 

Ensuite, j’ai installé le compositeur à nouveau et le tour est joué!

Cela a fonctionné pour moi.

 sudo adduser  www-data sudo chown -R www-data:www-data /var/www sudo chmod -R g+rwX /var/www 

Ensuite, déconnectez-vous ou redémarrez.

Si SELinux plaint, essayez ce qui suit

 sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?' sudo restorecon -Rv '/var/www(/.*)?' 

Essaye ça:

  1. Ouvrez / etc / apache2 / envvars

     sudo gedit /etc/apache2/envvars 
  2. remplacez www-data par votre your_username

     "export APACHE_RUN_USER=www-data" 

    remplacer par

     export APACHE_RUN_USER='your_username' 

Je voulais append ceci aux suggestions précédentes. Si vous utilisez une version de Linux sur laquelle SELinux est activé, vous devez également l’exécuter dans un shell:

 chcon -R --type httpd_sys_rw_content_t /path/to/your/directory 

En plus de donner à votre serveur Web des permissions utilisateur via le groupe ou la modification du propriétaire de l’annuaire.

Ce problème se produit lorsque l’utilisateur apache (www-data) n’est pas autorisé à écrire dans le dossier. Pour résoudre ce problème, vous devez placer l’utilisateur dans le groupe www-data.

Je viens de faire ça:

Exécutez ce code php pour découvrir l’utilisateur utilisé par apache. Après, exécutez les commandes dans le terminal:

 user@machine:/# cd /var/www/html user@machine:/var/www/html# ls -l 

Il retournera quelque chose comme ceci:

 total of files drwxr-xr-x 7 user group size date folder 

J’ai gardé l’utilisateur mais j’ai changé le groupe en www-data

 chown -R user:www-data yourprojectfoldername chmod 775 yourprojectfoldername 

Essaye ça

find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664

Changez simplement l’autorisation de tmp_file_upload à 755 Voici la commande chmod -R 755 tmp_file_upload

La solution est si facile. Cliquez avec le bouton droit de la souris sur le dossier IMAGE (destination), accédez aux propriétés, cliquez sur l’onglet des permissions et modifiez l’access des autres utilisateurs pour Créer et supprimer des fichiers .