153 votes

move_uploaded_file donne « n’a pas pu ouvrir le flot : Permission denied "erreur après toutes les configurations que j’ai fait

Je reçois cette erreur lorsque vous tentez de configurer le répertoire de téléchargement avec Apache 2.2 et PHP 5.3 sur CentOS.

En 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
</Directory>
<Directory /var/www/html/mysite/images/>
                Options -Indexes
</Directory>

CentOS autorisations de répertoire:

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 reçois cette erreur de PHP quand je télécharge le fichier:

Warning: move_uploaded_file(images/robot.jpg): failed to open stream: Permission denied in /var/www/html/mysite/process.php sur la ligne 78

Warning: move_uploaded_file(): Impossible de déplacer '/tmp/phpsKD2Qm' à 'images/robot.jpg" dans /var/www/html/mysite/process.php sur la ligne 78

Comme vous pouvez le voir, il n'avait jamais fait de prendre la configuration du php.fichier ini à propos de l'upload de fichier.

Ce que je fais mal?

197voto

Laith Shadeed Points 1839

C'est parce qu' images et tmp_file_upload sont uniquement accessible en écriture par root d'utilisateur. Pour le téléchargement, nous avons besoin de faire le propriétaire de ces dossiers même que les processus httpd propriétaire OU de les faire à l'échelle mondiale en écriture (mauvaise pratique).

  1. Vérifier apache propriétaire du processus: $ps aux | grep httpd. La première colonne sera le propriétaire typiquement, il sera nobody
  2. Changer le propriétaire de l' images et tmp_file_upload d'être nobody ou quel que soit le propriétaire, vous avez trouvé dans l'étape 1.

    $sudo chown nobody /var/www/html/mysite/images/

    $sudo chown nobody /var/www/html/mysite/tmp_file_upload/

  3. Chmod images et tmp_file_upload maintenant être accessible en écriture par le propriétaire, si nécessaire [Semble que vous avez déjà en place]. Mentionné dans @Dimitri 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, le pourquoi de ce comportement dans les parages, consultez le manuel http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir notez que c'est aussi parler d' open_basedir directive.

83voto

twlkyao Points 1017

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

``

et puis changer le propriétaire du répertoire de destination pour ce que vous avez, utilisez la commande :

et puis utilisez la commande :

pour modifier les autorisations de répertoire de destination.

12voto

Dmitry Teplyakov Points 870

Modifier les autorisations pour ce dossier

``

7voto

abaumer Points 31

Désolé. Je sais que c'est un vieux thread, mais je viens de tomber sur cette question, même après avoir déjà réussi à exécuter compositeur. J'ai mis à jour le compositeur et lors de l'exécution d' composer install ou php composer.phar install obtenu:

...failed to open stream: Permission denied...

S'avère, après beaucoup de recherches, que les réponses ci-dessus concernant la modification des autorisations pour le dossier travaillé, ils sont juste un peu différents répertoires maintenant.

Dans mon installation, sur OSX, le fichier de cache est en /Users/[USER]/.composer/cache et j'ai eu du mal parce que le fichier de cache a été détenue par la racine. Modification de la propriété d' '.compositeur " de manière récursive pour mon utilisateur a résolu le problème.

C'est ce que j'ai fait:

sudo chown -R [USER] cache

Puis a couru le compositeur installer de nouveau et le tour est joué! Espérons que cette aide.

2voto

simone Points 5580

Essayez ceci

``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X