12
votes

mkdir () ne fonctionne pas

mon code xxx

et xxx

ne fonctionne pas, le mode sans échec est éteint et j'ai même essayé de définir tout des dossiers parent à 777.

Des idées?

EDIT: J'ai fait état d'erreur allumée, dans ma frustration, j'ai 777'd tout le chemin juste pour m'assurer que que ce n'est pas le problème. Il faut que ce soit quelque chose de stupidement simple.

Modifier EDIT: UPVOTES pour tous ceux qui ont répondu avec des suggestions ... mais je ne vais pas choisir une réponse puisque cela n'est toujours pas résolu, mais encore une fois Je pense que cela va être l'une de ces personnes laissées ouvertes pour toujours.

Editer x 3: J'ai donc la résolution la plus insatisfaisante de cette question ... J'ai commencé avec une image vm propre, a rétréciée et ça marche maintenant. Pas de blague.


9 commentaires

Aucun, ça passe juste c'est une chose et ne crache aucune erreur. J'ai même essayé de voir si c'était en quelque sorte placer à tort le nouveau répertoire ailleurs et je pouvais trouver si n'importe où.


Quelques choses: le processus qui exécute-t-il ce code est-il autorisé à écrire dans le répertoire parent? Si vous exécutez ceci via un serveur Web, avez-vous vérifié les journaux des messages d'erreur?


Donc, vous devez transformer une déclaration d'erreur sur


@Col. Shrapnel: Ah, oui c'est vrai, j'avais supposé que ce soit le cas, mais nous savons ce qui se passe lors de l'hypothèse. Merci d'avoir fait remarquer cela!


Haha Yeah Reporting d'erreur est sur mais il ne craque aucune erreur d'erreur, j'ai même essayé d'utiliser ce code Stackoverflow.com/questions/927564/... et il ne revient pas avec des erreurs, tout le chemin est 777 de / var vers www dans le répertoire de projet. Ça me fait sortir mes cheveux. Il faut que ce soit quelque chose de stupidement simple.


Je doute que vous ayez votre déclaration d'erreur vraiment sur.


Je suis surtout à court d'idées ici, sauf pour vous suggérer de courir avec la ligne de commande PHP si possible (et que vous n'avez pas déjà) pour voir si cela crachera un message d'erreur. Si votre script existant ne fonctionnera pas sans le serveur Web, créez simplement un court script comme:


Outre ERROR_REPORTING, est "DISPLAY_ERRORS" également défini sur 1? C'est une chose que j'aime toujours oublier et si cela n'a pas l'aide et aucune erreur n'est affichée, j'ai également manqué d'idées.


C'est le code que j'utilise habituellement pour afficher des erreurs tout en testant ... INI_SET ('"Display_Errors', 1); error_rporting (e_all | e_strict); Mais comme je l'ai dit, j'ai essayé cet autre code que j'ai trouvé ici, alors je ne sais pas.


9 Réponses :


-3
votes

Vous manquez des citations autour du paramètre Nom du chemin.


2 commentaires

Le code a réellement que là-bas ... Désolé dans ma frustration, j'ai oublié qu'en, je vais faire une édition. Toute autre idée?


Assurez-vous que vous avez enregistré une déclaration d'erreur afin que vous puissiez voir si cela donne des avertissements lors de l'appel de la fonction.



15
votes

Est-ce que tous les répertoires parent existent?

Sinon, vous aurez besoin d'activer la récursion (supposer PHP5 ici): P>

mkdir('/path/to/your/dir',0777,true);


2 commentaires

Tout est bon, j'avais peur de cela se produire, alors je viens de modifier la question initiale.


Ravi de voir une réponse de sept ans aide toujours les gens!



-3
votes

Vous devez prendre l'attribut entre guillemets: xxx


1 commentaires

Non, le paramètre Mode est défini comme une octale int afin que vous ne soit pas Mettre des citations autour de lui.




2
votes

Avez-vous essayé avec le test le plus court possible?

mkdir ("répertoire", 0777);

Si cela ne fonctionne pas, j'essaierais de créer avec une chmod standard comme 0755 (il s'agit d'une supposition totalement aléatoire, peut-être que le serveur ne permettra pas de créer 0777 via PHP)

Si cela ne fonctionne pas, je dirais que le serveur a probablement besoin d'une configuration / PHP différente, cessez-vous de l'écriture sur le dossier, peut-être que vous pouvez demander à votre fournisseur d'hôte?


0 commentaires

1
votes

J'ai un problème similaire et j'ai découvert que je n'ai pas espace libre laissé sur mon lecteur. Vérifiez avec la commande df (sur Linux) Quelle est la pleine correspondance de votre lecteur. Il est possible que la racine soit autorisée à créer des fichiers et des dossiers dans cette situation, car il a un espace pré-réservé. Si vous exécutez votre script à partir de la ligne de commande en tant qu'utilisateur root - il n'y a pas d'erreur, mais si votre script est exécuté par Apache , puis une erreur d'erreur.


0 commentaires

3
votes

Si quelqu'un se coince avec ce problème. Il y a une réponse que je peux vous donner que je consacre 2 heures à trouver .. J'ai essayé d'utiliser un chemin complet, et "../mydirectoryname".

Utiliser: xxx

au lieu de .. xxx


0 commentaires

1
votes

Pour les futures références, le problème peut provenir de la possibilité que le répertoire où vous essayez de créer votre nouveau répertoire n'a pas suffisamment d'autorisation.

Par exemple, votre répertoire d'index pourrait ressembler à ceci: index.php new_dirs_here

Si new_dirs_here n'a pas assez d'autorisation, vous ne pouvez pas créer de direcories à l'intérieur.

Pour résoudre ceci, j'utiliserais la commande: CHMOD 777 NEW_DIRS_HERE

Je ne m'inquiète pas pour la sécurité maintenant, essayez simplement de résoudre le problème immédiat. Vous pouvez bien sûr rechercher des paramètres de meilleure autorisation, mais l'idée est que votre New_Dirs_Here doit avoir suffisamment d'autorisations.

Ensuite, votre mkdir () Le dossier devrait fonctionner très bien.

bonne chance


1 commentaires

Vous êtes un ange absolu, j'avais besoin de cela. Pour une raison quelconque, aucune des autres réponses n'a fonctionné, même avec CHMOD 0755 et spécifiant les modes de MKDIR



1
votes

Assurez-vous que les annuaires des parents ont des autorisations d'écriture correctes, c'était mon problème


0 commentaires