Je suis en train de créer un répertoire avec la fonction PHP mkdir mais je reçois une erreur comme suit: Warning: mkdir() [function.mkdir]: Permission denied in .... Comment régler le problème?
Je sais que c'est un vieux fil, mais il faut une meilleure réponse. Vous ne devriez pas avoir besoin de définir les autorisations sur 777, c'est un problème de sécurité car cela donne un accès en lecture et en écriture au monde. Il se peut que votre utilisateur apache ne dispose pas des autorisations de lecture / écriture sur le répertoire.
Voici ce que vous faites dans Ubuntu
Assurez-vous que tous les fichiers appartiennent au groupe et à l'utilisateur Apache. Dans Ubuntu, c'est le groupe et l'utilisateur www-data
chown -R www-data:www-data /path/to/webserver/www
Ensuite, tous les membres du groupe www-data ont pu lire et écrire des fichiers
chmod -R g+rw /path/to/webserver/www
La mkdir()fonction php devrait maintenant fonctionner sans renvoyer d'erreurs
Apache a besoin d'une autorisation pour écrire des choses comme le cache et les journaux ... c'est juste une question de réglage fin.
Manatax
@simpleengine Salut, j'ai remarqué votre réponse .. Je suis confronté au même problème avec un projet que j'essaie de créer dans CodeIgnter et de développer dans Ubuntu 14.14 Lts .. Pourriez-vous s'il vous plaît m'expliquer plus en détail les étapes nécessaires pour faire pour corriger cette erreur ??? Pour vous donner quelques informations supplémentaires: le chemin absolu est /opt/lampp/htdocs/www/my-app/public/uploads.. Fondamentalement, ce que j'essaie de faire est que chaque utilisateur connecté télécharge des fichiers dans le dossier uploads et crée également des dossiers d'albums (cela sera fait avec php) pour stocker des photos ..
ltdev
6
Je n'aime pas les utilisateurs qui ne cessent de dire "ce n'est pas sûr" sans montrer la manière sécurisée de le faire.
che-azeh
38
Réponse tardive pour les personnes qui trouveront cela via google à l'avenir. J'ai rencontré le même problème.
REMARQUE: JE SUIS SUR MAC OSX LION
Ce qui se passe, c'est qu'apache est exécuté en tant qu'utilisateur "_www" et n'a pas les autorisations pour modifier les fichiers. Vous remarquerez qu'aucune fonction du système de fichiers ne fonctionne via php.
Comment réparer:
Ouvrez une fenêtre de recherche et dans la barre de menus, choisissez Aller> Aller au dossier> / private / etc / apache2
maintenant ouvrez httpd.conf
trouver:
User _www
Group _www
changer le nom d'utilisateur:
User<YOUR LOGIN USERNAME>
Maintenant, redémarrez Apache en exécutant ce terminal de formulaire:
sudo apachectl -k restart
Si cela ne fonctionne toujours pas, il se trouve que je fais ce qui suit avant de faire ce qui précède. Cela pourrait être lié.
Ouvrez le terminal et exécutez les commandes suivantes: (notez que les fichiers de mon serveur Web se trouvent dans / Bibliothèque / WebServer / www. Changez en fonction de l'emplacement de votre site Web)
Cette solution fonctionne, mais permet à Apache de faire des ravages dans votre système si quelqu'un lui demande d'exécuter du code malveillant (par exemple via l'exploit Shellshock). Une alternative serait de laisser Apache s'exécuter en tant que _wwwet de créer un groupe pour vous et Apache. Créez un nouveau groupe, dites appelé trusted, et inscrivez-vous _www. Faites ensuite confiance au propriétaire du groupe de tous les fichiers du répertoire de documents de votre serveur. Enfin, faites le chmod g+rwxcas échéant sur uniquement les fichiers auxquels Apache a besoin d'accéder, afin que le trustedgroupe soit autorisé à modifier les fichiers.
Chris Middleton
3
juste sonner pour souligner à nouveau que cette réponse est une mauvaise idée. il existe de très bonnes raisons pour lesquelles les processus apache appartiennent à leur propre utilisateur spécialisé.
danyamachine
15
Ne définissez pas les autorisations sur 777 lors de l'utilisation de mkdir en PHP
Les réponses aux liens uniquement ne sont pas considérées comme une bonne pratique sur StackOverflow, mais les conseils donnés ici ne doivent généralement PAS être suivis.
Veuillez arrêter de suggérer d'utiliser 777. Vous rendez votre fichier accessible en écriture par tout le monde, ce qui signifie à peu près que vous perdez toute la sécurité pour laquelle le système d'autorisation a été conçu. Si vous suggérez cela, pensez aux conséquences que cela peut avoir sur un serveur web mal configuré: il deviendrait incroyablement facile de "pirater" le site, en écrasant les fichiers. Alors, ne le faites pas.
Je viens de résoudre le problème dans la question d'origine en modifiant les autorisations de fichier sur 755 de manière récursive, en utilisant Filezilla. Cliquez avec le bouton droit sur le dossier parent, en supposant qu'il s'agit d'une sorte de dossier de référentiel de fichiers général sur lequel il est possible de définir des autorisations 755, puis Attributs de fichier -> Valeur numérique -> 755, puis cochez "Recurse dans les sous-répertoires". Prend quelques minutes pour se propager dans les sous-répertoires si vous avez beaucoup de fichiers. Puis réessayez.
TARKUS
7
Je sais que ce fil est vieux, mais peut-être que cela aidera quelqu'un, un jour.
Le problème pour lequel PHP dit "Autorisation refusée" pour mkdir () - chemin d'URL incorrect. Donc, pour résoudre ce problème, tout ce dont vous avez besoin est d'obtenir le chemin correct. Je l'ai fait de cette façon:
Cela m'est arrivé lors du transfert vers un nouvel hôte (qui a mysqlnd lol). J'ai oublié de passer au nouveau chemin complet du répertoire personnel. Il s'avère que ce n'était pas vraiment un problème de permission.
JSG
2
Vous devez disposer de l'autorisation du système de fichiers pour créer le répertoire.
Exemple: dans Ubuntu 10.04, apache (php) s'exécute en tant qu'utilisateur: www-data dans le groupe: www-data
Cela signifie que l'utilisateur www-data a besoin d'un accès pour créer le répertoire.
Vous pouvez l'essayer vous-même en utilisant: 'su www-data' pour devenir l'utilisateur www-data.
En guise de solution rapide, vous pouvez faire: sudo chmod 777 my_parent_dir
chmod 0777donnera un accès en lecture et en écriture au monde! Vous ne devriez pas conseiller quelque chose comme ça. Cependant, le conseil avec le groupe d'utilisateurs est actuellement le meilleur ici :)
KingCrunch
1
Si le monde a accès au système d'exploitation, bien sûr. La meilleure façon serait: sudo chown www-data: www-data my_parent_dir
Jon Skarpeteig
Ou laissez les autorisations seules et ajoutez www-data au groupe du répertoire parent.
Marc B
0
L'autre chose que vous pouvez faire est d'aller dans: / etc / sudoers
Ajoutez-y la ligne suivante qui donne la permission à cet utilisateur www-data ALL = (ALL: ALL) ALL Pourquoi www-data? c'est parce qu'apache s'exécute sous ce nom d'utilisateur.
Incase si votre utilisateur est différent, essayez le nom d'utilisateur ALL = (ALL: ALL) ALL
ne modifiez pas sudoersdirectement, mais connectez-vous en tant que root et utilisez la visudocommande te : qui vérifie les modifications pour éviter les modifications erronées, qui peuvent provoquer des erreurs d'analyse lorsque le fichier sudoers est chargé, ce qui pourrait vous laisser impuissant (car aucun droit à changer quoi que ce soit)
Elias Van Ootegem
Comment trouver le nom d'utilisateur. comme www-data? J'utilise nginx mais je ne travaille pas
robspin
1
@robspin essayez ceci: ps aux | egrep '(nginx)'
maxwells
0
Puisque vous êtes sur un mac, vous pouvez vous ajouter au groupe _www (le groupe d'utilisateurs apache) sur votre mac:
sudo dseditgroup -o edit -a $USER -t user _www
et ajoutez l'utilisateur _www au groupe de roues qui semble être ce que le mac crée des fichiers comme:
J'ai ce problème tout à l'heure, ma meilleure solution que je puisse vous donner pour le moment (bien que vous n'ayez inclus aucun de votre code) serait:
Vérifiez comment vous nommez votre dossier de destination, par exemple: nouveau_folder (parfois cela peut provoquer une erreur d'autorisation car la plupart des hôtes n'autorisent pas la création de noms utilisant des traits de soulignement, des tirets, etc. au moment de l'exécution). Cela a fonctionné pour moi.
Si vous utilisiez la commande récursive pour créer des sous-dossiers, n'oubliez pas de mettre 0755 (n'oubliez pas d'inclure 0 au début) dans la commande mkdir, par exemple:
if(!file_exists($output)){if(!mkdir($output,0755,true)){//0755die('Failed to create folders...');}}
Cela a également fonctionné pour moi en ce moment.
Après avoir installé le serveur ftp avec sudo apt-get install vsftpdvous devrez le configurer. Pour activer l'accès en écriture, vous devez modifier le /etc/vsftpd.conffichier et décommenter le
#write_enable=YES
ligne, donc il devrait lire
write_enable=YES
Enregistrez le fichier et redémarrez vsftpdavec sudo service vsftpd restart.
Réponses:
Je sais que c'est un vieux fil, mais il faut une meilleure réponse. Vous ne devriez pas avoir besoin de définir les autorisations sur 777, c'est un problème de sécurité car cela donne un accès en lecture et en écriture au monde. Il se peut que votre utilisateur apache ne dispose pas des autorisations de lecture / écriture sur le répertoire.
Voici ce que vous faites dans Ubuntu
Assurez-vous que tous les fichiers appartiennent au groupe et à l'utilisateur Apache. Dans Ubuntu, c'est le groupe et l'utilisateur www-data
chown -R www-data:www-data /path/to/webserver/www
Ensuite, tous les membres du groupe www-data ont pu lire et écrire des fichiers
chmod -R g+rw /path/to/webserver/www
La
mkdir()
fonction php devrait maintenant fonctionner sans renvoyer d'erreursla source
/opt/lampp/htdocs/www/my-app/public/uploads
.. Fondamentalement, ce que j'essaie de faire est que chaque utilisateur connecté télécharge des fichiers dans le dossier uploads et crée également des dossiers d'albums (cela sera fait avec php) pour stocker des photos ..Réponse tardive pour les personnes qui trouveront cela via google à l'avenir. J'ai rencontré le même problème.
REMARQUE: JE SUIS SUR MAC OSX LION
Ce qui se passe, c'est qu'apache est exécuté en tant qu'utilisateur "_www" et n'a pas les autorisations pour modifier les fichiers. Vous remarquerez qu'aucune fonction du système de fichiers ne fonctionne via php.
Comment réparer:
Ouvrez une fenêtre de recherche et dans la barre de menus, choisissez Aller> Aller au dossier> / private / etc / apache2
maintenant ouvrez httpd.conf
trouver:
changer le nom d'utilisateur:
Maintenant, redémarrez Apache en exécutant ce terminal de formulaire:
Si cela ne fonctionne toujours pas, il se trouve que je fais ce qui suit avant de faire ce qui précède. Cela pourrait être lié.
Ouvrez le terminal et exécutez les commandes suivantes: (notez que les fichiers de mon serveur Web se trouvent dans / Bibliothèque / WebServer / www. Changez en fonction de l'emplacement de votre site Web)
la source
_www
et de créer un groupe pour vous et Apache. Créez un nouveau groupe, dites appelétrusted
, et inscrivez-vous_www
. Faites ensuite confiance au propriétaire du groupe de tous les fichiers du répertoire de documents de votre serveur. Enfin, faites lechmod g+rwx
cas échéant sur uniquement les fichiers auxquels Apache a besoin d'accéder, afin que letrusted
groupe soit autorisé à modifier les fichiers.Ne définissez pas les autorisations sur 777 lors de l'utilisation de mkdir en PHP
Les réponses aux liens uniquement ne sont pas considérées comme une bonne pratique sur StackOverflow, mais les conseils donnés ici ne doivent généralement PAS être suivis.
Je voudrais revenir sur cette excellente réponse à une question similaire . Je cite:
la source
Fixer les permissions du répertoire que vous essayez de créer un répertoire dans .
la source
Je sais que ce fil est vieux, mais peut-être que cela aidera quelqu'un, un jour.
Le problème pour lequel PHP dit "Autorisation refusée" pour mkdir () - chemin d'URL incorrect. Donc, pour résoudre ce problème, tout ce dont vous avez besoin est d'obtenir le chemin correct. Je l'ai fait de cette façon:
la source
Vous devez disposer de l'autorisation du système de fichiers pour créer le répertoire.
Exemple: dans Ubuntu 10.04, apache (php) s'exécute en tant qu'utilisateur: www-data dans le groupe: www-data
Cela signifie que l'utilisateur www-data a besoin d'un accès pour créer le répertoire.
Vous pouvez l'essayer vous-même en utilisant: 'su www-data' pour devenir l'utilisateur www-data.
En guise de solution rapide, vous pouvez faire: sudo chmod 777 my_parent_dir
la source
chmod 0777
donnera un accès en lecture et en écriture au monde! Vous ne devriez pas conseiller quelque chose comme ça. Cependant, le conseil avec le groupe d'utilisateurs est actuellement le meilleur ici :)L'autre chose que vous pouvez faire est d'aller dans: / etc / sudoers
Ajoutez-y la ligne suivante qui donne la permission à cet utilisateur www-data ALL = (ALL: ALL) ALL Pourquoi www-data? c'est parce qu'apache s'exécute sous ce nom d'utilisateur.
Incase si votre utilisateur est différent, essayez le nom d'utilisateur ALL = (ALL: ALL) ALL
Cela a fonctionné pour moi.
la source
sudoers
directement, mais connectez-vous en tant que root et utilisez lavisudo
commande te : qui vérifie les modifications pour éviter les modifications erronées, qui peuvent provoquer des erreurs d'analyse lorsque le fichier sudoers est chargé, ce qui pourrait vous laisser impuissant (car aucun droit à changer quoi que ce soit)Puisque vous êtes sur un mac, vous pouvez vous ajouter au groupe _www (le groupe d'utilisateurs apache) sur votre mac:
et ajoutez l'utilisateur _www au groupe de roues qui semble être ce que le mac crée des fichiers comme:
la source
J'ai ce problème tout à l'heure, ma meilleure solution que je puisse vous donner pour le moment (bien que vous n'ayez inclus aucun de votre code) serait:
Si vous utilisiez la commande récursive pour créer des sous-dossiers, n'oubliez pas de mettre 0755 (n'oubliez pas d'inclure 0 au début) dans la commande mkdir, par exemple:
Cela a également fonctionné pour moi en ce moment.
la source
Si vous utilisez LINUX, vérifions d'abord l'utilisateur d'Apache, car dans certaines distributions, cela peut être différent:
Disons que le résultat est "http". Faites ce qui suit, souvenez-vous simplement de changer path_to_folder en chemin de dossiers:
la source
vérifier si ce n'est pas un problème avec umask
la source
Après avoir installé le serveur ftp avec
sudo apt-get install vsftpd
vous devrez le configurer. Pour activer l'accès en écriture, vous devez modifier le/etc/vsftpd.conf
fichier et décommenter leligne, donc il devrait lire
Enregistrez le fichier et redémarrez
vsftpd
avecsudo service vsftpd restart
.Pour d'autres options de configuration, consultez cette documentation ou
man vsftpd.conf
la source
Cette erreur se produit si vous utilisez le mauvais chemin.
Par exemple:
J'utilise le système ubuntu et le nom de mon dossier de projet est 'myproject'
Supposons que le répertoire myproject / public / report existe et que je souhaite créer un nouveau dossier appelé orders
Ensuite, j'ai besoin d'un chemin complet où mon projet existe. Vous pouvez obtenir le chemin par la commande PWD
Mon chemin racine sera donc = '/ home / htdocs / myproject /'
$ dir = '/ home / htdocs / monprojet / public / rapport / Commandes';
Cela fonctionnera pour vous !! Prendre plaisir !!
la source