PHP mkdir() et fopen() ne fonctionne pas - les autorisations de problème? umask problème?
Suivantes script PHP ne parvient pas à créer le répertoire. Il ne sera pas suffisante pour créer le fichier (si le répertoire existe déjà).
ini_set('error_reporting', E_ALL);
define('ABSPATH', $_SERVER['DOCUMENT_ROOT']);
echo ABSPATH . '<br /><br />';
$dir_to_make = ABSPATH . '/aaatest';
$file_to_make = ABSPATH . '/aaatest/aaatest.txt';
echo umask() . '<br />';
mkdir($dir_to_make) or die('could not create directory');
fopen($file_to_make) or die('could not open/create file');
Le umask() retourne une valeur de 18 ans. La racine du document dispose d'un délai de ( /var/www/bla/websitename.com/httpdocs ).
Je ne comprends pas complètement umask(), je ne suis pas sûr de savoir comment bien l'utiliser. Je ne sais pas si c'est le problème ou pas, mais il ne semble pas être susceptible. Dois-je changer le umask, créez le fichier/répertoire, puis changer de nouveau? Quel doit être le umask de modifier/créer/modifier les fichiers/répertoires? Si le serveur est configuré différemment?
quel est le message d'erreur que php génère? si ce n'est pas de l'imprimer dans le flux html, alors il sera dans le journal du serveur.
PHP Warning: mkdir() [<a href='function.mkdir " >function.mkdir</a>]: Permission denied in /var/www/blah/websitename.com/httpdocs/aaa.php sur la ligne 13
Je dois également ajouter que sur ce serveur, dans le même compte, j'ai une installation complète de WordPress, qui est en cours d'exécution fine (téléchargement de fichiers, mise à jour des plugins, etc).
ah oui, votre processus PHP ne dispose pas des autorisations d'écriture pour créer le répertoire (voir ma réponse ci-dessous). Vous devriez tout d'abord être certain à 100% que vous êtes de passage le bon chemin pour
wordpress serait (probablement) exiger que PHP puisse écrire dans doc_root. Donc, je voudrais confirmer que votre
PHP Warning: mkdir() [<a href='function.mkdir " >function.mkdir</a>]: Permission denied in /var/www/blah/websitename.com/httpdocs/aaa.php sur la ligne 13
Je dois également ajouter que sur ce serveur, dans le même compte, j'ai une installation complète de WordPress, qui est en cours d'exécution fine (téléchargement de fichiers, mise à jour des plugins, etc).
ah oui, votre processus PHP ne dispose pas des autorisations d'écriture pour créer le répertoire (voir ma réponse ci-dessous). Vous devriez tout d'abord être certain à 100% que vous êtes de passage le bon chemin pour
mkdir
. Si vous avez confirmé que vous êtes en utilisant le chemin d'accès correct, alors vous avez certainement un problème d'autorisations - vous aurez besoin d'accorder les autorisations nécessaires sur le répertoire racine du document, de sorte que votre processus php peut écrire. Si vous n'avez pas administrative privs sur votre serveur, cela peut être une tâche pour un administrateur système.wordpress serait (probablement) exiger que PHP puisse écrire dans doc_root. Donc, je voudrais confirmer que votre
$dir_to_make
et $file_to_make
contiennent les chaînes que vous pensez qu'ils font. les imprimer comme cela, donc il n'y a pas de confusion: echo "[{$dir_to_make}]"
OriginalL'auteur matthewpavkov | 2010-10-31
Vous devez vous connecter pour publier un commentaire.
Afin de créer un fichier dans la racine du document, votre processus PHP doit avoir des autorisations d'écriture sur le répertoire. Généralement (mais pas toujours) de PHP s'exécute en tant que le même utilisateur que le serveur web s'exécute. Le nom de cet utilisateur varient avec les différents systèmes. Sur Ubuntu et Debian, l'utilisateur est appelé
www-data
, sur d'autres systèmes, il peut être justewww
, ouapache
, ouapache2
. Sur certains systèmes, il peut êtreroot
.Vous pouvez découvrir ce que l'utilisateur de votre PHP s'exécute en tant que par l'examen de la valeur du serveur superglobale:
$_SERVER['USER']
.phpinfo()
fournit un moyen facile de regarder des trucs comme ça. Généralement, l'utilisateur PHP est le même que l'utilisateur du serveur web (mais pas toujours).paramètre répertoire de la propriété et les autorisations est un autre sujet tout à fait, dépend sur quel système d'exploitation vous êtes, à ce que l'accès et les autorisations que vous avez pour le serveur, et pleins d'autres trucs. Si vous avez besoin de pointeurs, vous pourriez vous commencer à serverfault.com.
bonne chance.
[edit] OK, si vous êtes en cours d'exécution comme
apache
, et que vous essayez de créer un nouveau répertoire dans/var/www/blah/mydomain.com/htdocs/
... puis lorsque vous exécutez:vous vous attendez à voir quelque chose comme:
il y a deux parties:
drwxr-xr-x
signifie:d
= répertoire;rwx
= utilisateur a Lire,Écrire,exécuter;r-x
= groupe n'a fait que Lire, et de les exécuter;r-x
= tout le monde a seulement Lu, et de l'exécuter.et
apache apache
- la première est le nom de l'utilisateur propriétaire du fichier/répertoire, le second est le nom du groupe propriétaire du fichier/répertoire.donc, si vous avez vu quelque chose comme ceci:
il serait pas travail, car le répertoire est détenue par
root
(pas d'apache), et même si c'est regroupées parapache
, le répertoire n'est pas un groupe accessible en écriture, donc ça ne coupe pas. Dans ce scénario, vous pouvez simplement ajouter un groupe, écrire des perms (chmod g+w /var/www/blah/mydomain.com/htdocs
), et vous êtes bon pour aller.Quelque chose d'autre, vous pourriez voir est:
Dans ce cas, la propriété est ok, mais le répertoire n'est pas accessible en écriture par son propriétaire. Vous pouvez résoudre ce problème en ajoutant de l'autorisation d'écriture pour le propriétaire
chmod u+w /var/www/blah/mydomain.com/htdocs
.il ya beaucoup d'autres variantes, mais peut-être que cela aidera.
ok, voir mon récent modifier pour plus d'informations spécifiques à l'utilisateur
apache
oh, et le umask n'a pas d'importance - il contrôle les autorisations qui seront, par défaut, les répertoires que vous créez. Mais il ne les contrôle pas, si oui ou non vous pouvez créer un répertoire ou un fichier. Se concentrer sur l'obtention de votre script pour créer le répertoire à l'intérieur de la doc-racine. une fois que vous avez que de travail, puis ajouter de la création du fichier. Si vous pouvez créer le répertoire, mais alors vous n'êtes pas en mesure de créer le fichier, puis nous allons parler de umask. 😉
Ok, je pense que ne l'aide. Je ne suis pas un admin sur ce serveur, ne peut donc pas ssh, etc., cependant, je peux aller assez haut dans la structure de répertoire de voir que le dossier htdocs est détenu par le compte de l'utilisateur (websitename) (Aussi, le groupe de htdocs n'est pas apache) avec rwx r-x ---. Donc, puisque php est en cours d'exécution d'apache (et le groupe apache est trop, j'en suis sûr), alors il ne serait pas en mesure d'écrire dans htdocs? Est-ce exact?
oui, c'est correct. Lorsque vous avez une telle configuration (où le htdocs dir est détenue par un utilisateur qui correspond à la vhost --
websitename
dans votre cas)... dans une telle configuration, vous avez l'habitude de s'attendre à trouver de l'exécution de php comme CGI (ou fastcgi). À l'aide de cet arrangement, apache s'exécute comme son propre utilisateur (par exemple.apache
), tandis quesuexec
est utilisé pour permettre à php à exécuter en tant que le serveur virtuel de l'utilisateur (par exemple.websitename
) -- permettant ainsi à php d'accès en écriture dans les répertoires nécessaires. Si ce n'est pas ce qui se passe sur votre serveur, vous pouvez avoir une conversation avec votre administrateur de système.OriginalL'auteur Lee
Vous devez fournir 2 arguments de fopen.
Essayez de changer
à
Vérifiez les autorisations sur le répertoire.
OriginalL'auteur lbedogni