2010-02-07 4 views
6

A été sortir mes cheveux pour les 2 dernières heures sur ce sujet et je suis sûr que je fais quelque chose de vraiment stupide.mkdir ne fonctionne pas en PHP

<?php 
mkdir("blah", 0777); 
?> 

Ceci fonctionne via la ligne de commande et le dossier est créé. Mais la même chose ne fonctionne pas lorsque j'essaie de l'exécuter via le navigateur. Des problèmes d'autorisation de fichier?

+0

J'ai été coincé avec cela pendant longtemps, hth quelqu'un d'autre. Si vous êtes sur SELinux, il existe une couche supplémentaire d'autorisations appelée "Contexte de sécurité" que vous pouvez voir avec 'ls -alZ'. utiliser quelque chose comme 'chcon system_u: object_r: httpd_sys_content_t: s0 public_HTML' – changokun

Répondre

11

Serait-il possible que tout en s'exécutant sous la ligne de commande, le script hérite vos autorisations, mais ne fonctionne pas à partir du navigateur?

Dans ce cas, vous voudriez que vos permissions de répertoire 'écrivent' pour le groupe.

+4

Haha! 10 000 réputation! Huzzah! –

3

Votre serveur web (apache?) Fonctionne comme il est propre utilisateur, et ne pas la permission d'écrire dans le répertoire que vous utilisez mkdir dans.

Donnez votre permission utilisateur du serveur Web pour écrire au répertoire par A) le rendant propriétaire, B) l'ajoutant au groupe si le groupe a l'autorisation d'écriture, ou C) donner à tout le monde l'autorisation d'écriture (non recommandé pour la plupart des configurations).

+0

Avait le même problème, résolu! J'ai d'abord créé un dossier avec FTP, quand utiliser mkdir pour créer des dossiers à l'intérieur ne fonctionnait pas. Supprimer le dossier et s'assurer que le script le crée le résout. – Pedro

0

Vous pouvez essayer avec le umask, Lorsque PHP est utilisé comme module serveur, le umask est restauré lorsque chaque requête est terminée.

$old = umask(0); 
mkdir($path,0777); 
umask($old);