2017-02-16 3 views
1

Я знаю, что это распространенная проблема, но я не смог выделить проблему для своего конкретного случая использования, так что несите меня.PHP file_put_contents, возвращающий «Permission Denied»

У меня есть простой PHP-скрипт send_id, который просто отправляет идентификационный номер и сохраняет его в TXT-файле на моем сервере RHEL с Apache 2.4.6 с PHP 5.4.

Сообщение об ошибке: Warning: file_put_contents(/var/www/html/id.txt): failed to open stream: Permission denied in /var/www/html/send_id.php on line 6 '1' written to server

РНР сам скрипт:

<?php 
$id=$_GET['id']; 
$stringData = "$id"; 
$file = file_put_contents('/var/www/html/id.txt', $stringData.PHP_EOL , FILE_APPEND |LOCK_EX); 
echo "'$stringData' written to server"; 
?> 

chmodding 777 ничего не делать. Кроме того, я проверил, чтобы увидеть права собственности и заметил, что файл id.txt принадлежит пользователю root на уровне пользователя/группы, а PHP запускается на корневом уровне.

У кого-нибудь есть предложения? Если какая-либо помощь, похоже, произошла после yum update

ответ

-1

Я решил эту проблему, просто запустив chcon -Rt httpd_sys_content_rw_t на каталог, где мой беспокойный PHP скрипт жил.

+1

Да, +1 для не просто отключения SELinux! – miken32

+0

хорошо ... пока это будет работать, не может рекомендовать это. Пожалуйста, см. Мой ответ –

+0

Aaaaand, что именно это делается? – TerranRich

-1

Попробуйте изменить владельца папки и файла на (chown) на «www-data» или на «www-data: www-data» и посмотреть если он меняет что-нибудь ...

+0

Нет, к сожалению ничего не сделал –

-1

Используйте относительный путь к файлу из «ДОКУМЕНТА ROOT» в Apache для ссылки на файлы PHP. Это разрешения Apache, которые имеют значение, и по соображениям безопасности он закодирован для запрета доступа к файлам вне DOCUMENT_ROOT .. (да, хотя ваш путь ведет к нему, Apache блокируется, как только он видит, что путь начинается с «/ VAR». .

Предполагая, что этот скрипт находится в том же каталоге, что и файл id.txt, просто использовать

$file = file_put_contents('./id.txt', $str...  

Или, если текстовый файл был в подкаталоге

file_put_contents('./sub-dir/id.txt', $str... 

не только он защищен, его намного короче набирать.

+0

«Apache заблокирован, как только он видит, что путь начинается с/VAR». Это нагрузка глупости. – miken32

+0

Сначала это был './Id.txt', но это все еще приводило к проблеме. Мое решение ниже устранило проблему, хотя –