2010-10-07 11 views
13

Я путать с этим кодом:PHP: Еореп() Отказано в

test.php:

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

когда я исполню его, я получаю сообщение об ошибке:

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

тест .txt:

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

В чем проблема?

Спасибо большое! Я нашел проблему, я использую FC13, из-за защиты SELinux, некоторые действия отрицаются. Поэтому мне просто нужно избавиться от защиты.

+4

бы случайно быть файл, расположенный на смонтированном каталоге NFS? – SirDarius

+3

Вы также проверяли разрешения каталога, в котором находится файл? –

+1

Работает ли php как пользователь jt'? Если файл, который вы хотите открыть, принадлежит другому пользователю, это тоже может быть проблемой. – methode

ответ

5

Использование fopen($_SERVER['DOCUMENT_ROOT'].'test.txt','a+');

+2

+1 И подумайте о проверке того, что file_exists также! – Fenton

13

попробовать

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

в

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

, скорее всего, ищет в другом каталоге

4

Контуры всегда вызывают проблемы при попытке открыть файлы. Легкий способ избежать каких-либо проблем при попытке открыть файлы - проверить, в каком каталоге вы находитесь, и куда вы звоните.

echo getcwd(); 

Создайте простую страницу PHP и сделайте вызов, распечатав текущий каталог. Отбросьте страницу PHP в тот же каталог, что и файл, и он скажет вам правильный путь к папке, а затем просто добавит в /filename.xxx.

4

Проверьте контекст режим SELinux файла, убедитесь, что он установлен на: httpd_user_content_t

... Если это не так, используйте:

chcon httpd_user_content_t test.txt 

... чтобы исправить эту проблему.

6

Я получаю такую ​​же ошибку «не удалось открыть поток, разрешенное разрешение» при попытке записать файл на сервере с помощью PHP. Я испробовал все в Интернете, чтобы исправить ошибку. Я изменил права собственности на файлы, каталоги и подкаталоги на сервере на «apache», я сделал «chmod 777» во всех файлах, каталогах, поддиректориях, я запустил «restorecon -R», я запустил «chcon unconfined_u: object_r: httpd_user_content_t: s0 "во всех файлах, но единственное, что, казалось бы, работало, это полностью отключить SELinux.

Я, наконец, решил проблему. Проблема заключается в логических параметрах, используемых SELinux. Я выполнил следующую команду, чтобы получить список всех логических элементов, связанных с httpd.

$ getsebool -a | grep httpd

Это дало список около 36 параметров.

Я мучительно пошел и включил все булевы, используя команду setsebool, пока не исчезла ошибка «не удалось открыть поток.

Когда я повернул «на» httpd_unified boolean, ошибка исчезла! Когда я отключил его, ошибка вернулась!

+0

Большое спасибо. Я только что изменил chmod всех каталогов и подкаталогов на 777, и он отлично работал для меня! –

5

Эта проблема также может быть результатом включения SELinux. Это может быть решена с помощью:

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 

Вы можете узнать больше о контекстах в 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

Смежные вопросы