2010-10-07 6 views
13

Je suis confondu avec ce code:PHP: fopen() Permission refusée

test.php:

fopen('test.txt','a+'); 

quand je l'exécute, je reçois une erreur:

Warning: fopen(test.txt): failed to open stream: 
    Permission denied in /var/www/html/yuelu3/mobile/text.php on line 2 

essai .txt:

-rwxrwxrwx. 1 jt jt  87 10月 7 20:58 test.txt 

où est le problème?

Merci beaucoup, j'ai trouvé le problème, j'utilise FC13, à cause de la protection de SELinux, une action est refusée. Donc, j'ai juste besoin de me débarrasser de la protection.

+4

serait par hasard le fichier situé sur un répertoire monté NFS? – SirDarius

+3

avez-vous également vérifié les permissions du répertoire dans lequel réside le fichier? –

+1

Est-ce que php fonctionne en tant qu'utilisateur 'jt'? Si le fichier que vous souhaitez ouvrir appartient à un autre utilisateur, cela peut également poser problème. – methode

Répondre

5

Utilisez fopen($_SERVER['DOCUMENT_ROOT'].'test.txt','a+');

+2

+1 Et pensez à vérifier que file_exists aussi! – Fenton

13

essayer

fopen('/path/to/file/test.txt','a+'); 

comme

fopen('test.txt','a+'); 

est le plus probable à la recherche dans un autre répertoire

4

chemins toujours causer des problèmes lorsque vous essayez d'ouvrir des fichiers. Un moyen facile d'éviter tout problème lorsque vous tentez d'ouvrir des fichiers consiste à vérifier dans quel répertoire vous vous trouvez et à quel endroit vous appelez.

echo getcwd(); 

Créez une page PHP simple et lancez un appel pour imprimer le répertoire en cours. Déposez la page PHP dans le même répertoire que le fichier, et il vous dira le bon chemin vers le dossier, puis ajoutez simplement le /filename.xxx.

4

Vérifiez le mode contextuel SELinux du fichier pour être sûr qu'il est réglé sur: httpd_user_content_t

... Si ce n'est pas, utilisez:

chcon httpd_user_content_t test.txt 

... pour corriger le problème.

6

J'ai reçu la même erreur "échec de l'ouverture du flux. Permission refusée" lors de la tentative d'écriture d'un fichier sur le serveur en utilisant PHP. J'ai tout essayé sur Internet pour corriger l'erreur. J'ai changé la propriété des fichiers, répertoires et sous-répertoires du serveur en "apache", j'ai fait un "chmod 777" sur tous les fichiers, répertoires, sous-répertoires, j'ai couru "restorecon -R", j'ai couru "chcon unconfined_u: object_r: httpd_user_content_t: s0 "sur tous les fichiers, mais la seule chose qui semble fonctionner est de désactiver complètement SELinux.

J'ai finalement résolu le problème. Le problème résidait dans les paramètres booléens utilisés par SELinux. J'ai exécuté la commande suivante pour obtenir une liste de tous les booléens liés à httpd.

$ getsebool -a | grep httpd

Cela a donné une liste d'environ 36 paramètres.

J'ai douloureusement allumé et allumé chaque booléen en utilisant la commande setsebool jusqu'à ce que l'erreur "Echec de l'ouverture du flux, permission refusée" disparaisse.

Lorsque j'ai activé "on" le booléen httpd_unified, l'erreur est partie !! Quand je l'ai éteint, l'erreur est revenue !!

+0

Merci beaucoup. Je viens de changer chmod de tous les répertoires et sous-répertoires à 777 et ça a bien fonctionné pour moi! –

5

Ce problème peut également être dû à l'activation de SELinux. Ceci peut être résolu en utilisant:

chown -R apache:apache /var/www/html/directory_to_write 
chcon -R -t httpd_sys_content_t /var/www/html/directory_to_write 
chcon -R -t httpd_sys_rw_content_t /var/www/html/directory_to_write 

Vous pouvez trouver plus sur les contextes à https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-The_Apache_HTTP_Server-Types.html

Questions connexes