En PHP sous OSX 10.5, fopen = Autorisation refusée

Je lance l’installation standard de PHP et Apache sur OSX 10.5.8, et les parameters CHMOD du dossier que j’essaie d’ouvrir dans (commandes) est 777, le groupe est _WWW.

$filename = 'orders/54c9942b.txt'; if (!$handle = fopen($filename, 'w')) { return(false); } 

Je reçois ce qui suit:

 Warning: fopen(orders/54c9942b.txt) [function.fopen]: failed to open stream: Permission denied in /Users/New/Sites/thisisnothere/order-save.php on line 36 

* Edit: je l’ai testé sur mon serveur web (celui que je paye, pas celui que j’ai configuré) et ça marche comme prévu. Cela m’amène à penser que c’est un problème de configuration de mon serveur, peut-être un problème d’access dans Apache? ou PHP? Je ne suis pas du tout familier avec la configuration d’Apache.

Essayez d’utiliser le chemin complet du système de fichiers dans votre commande fopen () et voyez si cela fonctionne. Essayez-le ailleurs, vous savez que ça va marcher aussi (peut /tmp être /tmp ).

La permission qui compte est celle du fichier, pas celle du répertoire dans lequel il se trouve. Je suis sûr que c’est votre problème.

“Si vous essayez d’exécuter ce programme et que vous rencontrez des erreurs, vous voudrez peut-être vérifier que vous avez accordé l’access à votre fichier PHP pour écrire des informations sur le disque dur” extrait de tizag.com les permissions sur le fichier php lui-même, comme l’a déclaré Tyler.

J’ai une solution pour vous, mais je ne suis pas un gourou de la sécurité, utilisez cette solution uniquement sur votre localhost et si vos données ne sont pas sensibles comme les numéros de carte de crédit, les informations médicales, etc.

Cela fait une différence si vous appelez directement PHP directement sur une console ou si vous appelez le même fichier php via votre serveur Web local. J’ai trouvé que mon mac (lion) s’exécutait via le serveur Web en tant qu’utilisateur “localaccounts”.

Ensuite, j’ai résolu le problème comme suit:

Étape 1: modifiez le groupe du répertoire en cours et les fichiers à modifier via le serveur Web vers le groupe appelé “localaccounts”. Par exemple, entrez la commande suivante sur le terminal pour l’appliquer au répertoire en cours, un sous-répertoire “user images” et le fichier foo.sqlite.

 chgrp -R localaccounts . foo.sqlite user\ images/ 

Étape 2: Accordez aux membres du groupe l’autorisation d’écrire à l’aide de la liste

 chmod g+w -R . foo.sqlite user\ images/ 

Notez que le point signifie le répertoire actuel.

J’ai essayé la même chose sur mon webhoster, mais ils ne le permettent pas de cette façon. Au lieu de cela, ils m’ont conseillé d’utiliser PHP CGI. PHP serait alors exécuté comme mon access d’utilisateur FTP. Je suppose que c’est plus sûr, mais je n’ai pas encore essayé.