php fopen ne parvient pas à ouvrir un fichier en écriture dans Mac OS X
Je suis en cours d'exécution de script php updreading.php en local sur mon ordinateur portable (avec Mac OS X 10.6.7).
Voici le contenu de updreading.php
<?php
$outFile = "examples-output.txt";
$out = fopen($outFile, 'w') or die("can't open write file");
?>
Quand je le lance, j'obtiens "ne peut pas ouvrir écrire le fichier" message d'erreur. Je pense qu'il doit avoir quelque chose à voir avec les autorisations. Je l'ai fait moi-même (arman) un propriétaire de /Library/WebServer/Documents/avec Lire&des autorisations d'Écriture et "les paramètres appliqués aux éléments inclus'. Mon script et le fichier que j'ai écris (examples-output.txt) est situé dans /Bibliothèque/WebServer/Documents/wabun/. Voici les autorisations pour les fichiers dans /Bibliothèque/WebServer/Documents/wabun/:
-rw-r--r--@ 1 arman admin 0 May 1 01:03 examples-output.txt
-rw-r--r--@ 1 arman staff 1657 May 1 01:04 updreading.php
J'ai essayé de résoudre le problème pour les 4 dernières heures à essayer différentes autorisations, mais sans succès. Toutes les idées sur la façon de résoudre ce problème, les gars? Merci!
- Qu'est-ce que la sortie de
var_dump(is_writable($outFile));
? - Question inutile, doit être faux...
- ça va être faux que si le monde n'est pas fou. J'ai vu PHP ne pas ouvrir de fichiers pour l'écriture, c'est pourtant vrai lorsque vous lui demandez si le fichier est accessible en écriture. Il a fini par être d'une étrange SELinux question, bien que cette question est sur OS X.
Vous devez vous connecter pour publier un commentaire.
Je parie que le problème, c'est que votre serveur web ou PHP instance ne s'exécute pas sous le même utilisateur (
arman
), vous pouvez vérifier cela en utilisant leget_current_user()
fonction. Vous pouvez soit configurer apache pour fonctionner avec votre privilèges (demandez en ServerFault) ou donner le dossier plus généreux des autorisations, comme0777
.Autre chose, êtes-vous sûr
$outFile
cartes à un absolue chemin? Essayez de faire:J'ai eu exactement le même problème. Je devais m'assurer que les autorisations ont été correcte pour l'ensemble de la parent dossiers. Par exemple, si (dans OSX) en train d'essayer d'écrire dans le répertoire
~/foo/bar/baz
, Je l'ai résolu avec la commandechmod -R 777 ~/foo
.vous avez besoin pour faire de apache (en supposant que apache est le serveur que vous utilisez), le propriétaire ou le mettre dans le groupe (et de groupe d'accès en écriture) ou de donner l'accès en écriture à tous ou etc.. OIE apache est le fait d'exécuter le script, pas vous.
chmod
de changer de lecture/écriture/exec perms de fichier,chown
de changer le propriétaire du fichier, etchgrp
changer de groupe de fichier. Le facile (et la moins sécurisée) solution serait d'chmod 777 [target file/dir]
tous les fichiers en question. Cela donnera à lire/écrire/exec permanentes à tous les propriétaires/groupes. Il y a de plus sûr manières, mais cela dépend de l'installation et des besoins. Mais certains ex:chown
modifier le propriétaire de apache. Ou créer un groupe avec apache et de l'utiliserchgrp
de changer de groupe (peut-être également besoin ochmod
pour changer d'utilisateur et/ou groupe d'unités de trop, en fonction de ce que vous faites. Actuel perms à l'OP montrer en lecture/écriture uniquement pour les propriétaires)