Je continue à avoir 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
</Directory>
<Directory /var/www/html/mysite/images/>
Options -Indexes
</Directory>
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
Quoi que je fasse, je reçois toujours cette erreur de PHP lorsque je télécharge le fichier:
Avertissement: move_uploaded_file (images/robot.jpg): échec de l'ouverture du flux: autorisation refusée dans /var/www/html/mysite/process.php à la ligne 78
Avertissement: move_uploaded_file (): impossible de déplacer "/ tmp/phpsKD2Qm" vers "images/robot.jpg" dans /var/www/html/mysite/process.php à la ligne 78
Comme vous pouvez le constater, la configuration du fichier php.ini n’a jamais été prise en ce qui concerne le fichier de téléchargement.
Qu'est-ce que je fais mal ici?
En effet, images
et tmp_file_upload
ne sont accessibles en écriture que par l'utilisateur root
. Pour que le téléchargement fonctionne, nous devons rendre le propriétaire de ces dossiers identique à celui du propriétaire du processus httpd OR afin de les rendre globalement accessibles en écriture (mauvaise pratique).
$ps aux | grep httpd
. La première colonne sera le propriétaire, généralement nobody
Modifiez le propriétaire de images
et tmp_file_upload
pour qu'il devienne nobody
ou le propriétaire que vous avez trouvé à l'étape 1.
$Sudo chown nobody /var/www/html/mysite/images/
$Sudo chown nobody /var/www/html/mysite/tmp_file_upload/
Chmod images
et tmp_file_upload
maintenant accessible en écriture par le propriétaire, si nécessaire [Il semble que vous l'avez déjà en place]. Mentionné dans la réponse de @Dmitry Teplyakov.
$ Sudo chmod -R 0755 /var/www/html/mysite/images/
$ Sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
Pour plus de détails sur les causes de ce problème, consultez le manuel http://php.net/manual/fr/ini.core.php#ini.upload-tmp-dir , notez qu'il est également question de open_basedir
directive.
Vous pouvez également exécuter ce script pour connaître le propriétaire du processus Apache:
<?php echo exec('whoami'); ?>
Et changez ensuite le propriétaire du répertoire de destination en ce que vous avez. Utilisez la commande:
chown user destination_dir
Et puis utilisez la commande
chmod 755 destination_dir
pour changer l'autorisation du répertoire de destination.
Si vous avez Mac OS X, allez à la racine du fichier ou au dossier de votre site web.
Ensuite, cliquez dessus avec le bouton droit de la souris, allez chercher des informations, allez tout en bas (partage & autorisations), ouvrez-le, changez tout en lecture seule pour lire et écrire. Assurez-vous d’ouvrir le cadenas, aller sur l’icône de réglage et choisir Appliquer pour les éléments inclus ...
Modifier les autorisations pour ce dossier
# chmod -R 0755 /var/www/html/mysite/images/
Je voulais ajouter 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 d'accorder des autorisations utilisateur à votre serveur Web, soit par le biais d'un groupe, soit en changeant le propriétaire du répertoire.
Cela a fonctionné pour moi.
Sudo adduser <username> www-data
Sudo chown -R www-data:www-data /var/www
Sudo chmod -R g+rwX /var/www
Puis déconnectez-vous ou redémarrez.
Si SELinux
se plaint, essayez ce qui suit.
Sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
Sudo restorecon -Rv '/var/www(/.*)?'
Je me suis heurté à ce problème, même après avoir déjà exécuté avec succès compositeur. J'ai mis à jour le compositeur et lors de l'exécution de composer install
ou php composer.phar install
j'ai eu:
... Impossible d'ouvrir le flux: autorisation refusée ...
Après de nombreuses recherches, il s'avère que les réponses précédentes concernant la modification des autorisations 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 de cache est dans /Users/[USER]/.composer/cache
et j'ai eu des problèmes parce que le fichier de cache appartenait à root. Changer le propriétaire de '.composer' 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
Ensuite, j'ai exécuté à nouveau le composer et le tour est joué!
Essaye ça:
ouvrir/etc/Apache2/envvars
Sudo gedit /etc/Apache2/envvars
remplacez www-data
par votre your_username
"export Apache_RUN_USER=www-data"
remplacer par
export Apache_RUN_USER='your_username'
Ce problème se produit lorsque l'utilisateur Apache (www-data) n'a pas l'autorisation d'écrire dans le dossier. Pour résoudre ce problème, vous devez placer l'utilisateur dans le groupe www-data.
Je viens de faire ceci:
Exécutez ce code php <?php echo exec('whoami'); ?>
pour découvrir l'utilisateur utilisé par Apache. Ensuite, exécutez les commandes dans le terminal:
user@machine:/# cd /var/www/html
user@machine:/var/www/html# ls -l
Il va retourner quelque chose comme ça:
total of files
drwxr-xr-x 7 user group size date folder
J'ai gardé l'utilisateur mais changé le groupe en www-data
chown -R user:www-data yourprojectfoldername
chmod 775 yourprojectfoldername
Il suffit de changer l'autorisation de tmp_file_upload à 755 Voici la commande chmod -R 755 tmp_file_upload
La solution est si simple. Cliquez avec le bouton droit de la souris sur le dossier IMAGE (destination), accédez à Propriétés, cliquez sur l'onglet Droits et modifiez l'accès des autres en Créer et supprimer des fichiers.
Essaye ça
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664