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).
$ps aux | grep httpd
$ps aux | grep httpd
. La première colonne sera le propriétaire généralement ce ne sera nobody
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/
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/
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:
Ouvrez / 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'
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 .