RHEL + PHP: запись файлов вне / var / www / html?

Я пытаюсь открыть файл для чтения / записи. Я развивался на Ubuntu и не имел никаких проблем. Теперь пришло время для развертывания на сервере RHEL, и я обнаружил, что, похоже, существует какое-то ограничение на расположение файла для записи.

В RHEL я не могу открыть файл, если он не находится в / var / www / html. Я не могу понять, как разрешить другие местоположения. Мне нужно манипулировать файлами на другом томе для управления дисковым пространством.

Ниже приведен фрагмент кода, который отлично работает на Ubuntu, несмотря ни на что, но разбивает RHEL, если файл находится за пределами корня веб-сайта:

$repometa = fopen( "/path/to/file/it/does/exist/and/has/good/perms", "r+b"); 

Фактическая ошибка следующая: это странно, потому что разрешения просто прекрасны (принадлежат пользователю «apache», с 0644 perms в файле, 755 на дисках).

 fopen(<thefile>): failed to open stream: Permission denied 

Может ли кто-нибудь указать мне на документы, описывающие, как разбить конфигурацию Apache / PHP RHEL, чтобы разрешить запись в альтернативные местоположения в файловой системе?

Спасибо, ~ Пол

    Как написано на httpd_selinux(8) man, вы должны предоставить файлы и каталоги конкретные контексты файлов, если вы хотите иметь возможность читать или писать им. См. Man-страницу для подробностей, имея в виду, что скрипты PHP выполняются как демон, если вы специально не настроили PHP для работы в качестве CGI.

    Чтобы добавить некоторые особенности к принятому ответу, у меня также была эта точная проблема, и эта команда исправила ее для меня.

     chcon -R -t httpd_sys_content_t /path/to/file/it/does/exist/and/has/good/perms 

    Звучит как проблема с правами пользователя и / или группы. Сам файл может быть доступен для записи … (как вы упомянули в своем прекрасном имени пути), но, возможно, пользователю apache (или, тем не менее, он называется) не разрешено делать какие-либо изменения файлов за пределами стандартного / var / www / Каталог html?

    Любой способ внести изменения в файл внутри / var / www / html, а затем иметь другой сценарий оболочки (и / или пользователя), взять его оттуда и перенести в нужный каталог?

    Интересно, что это будет работать на Ubuntu, а не на RHEL; возможно, RHEL является более строгим, поскольку пользователи и группы идут?

    В стороне: в общем, может быть безопаснее не писать PHP в файлы за пределами www-каталогов … 🙂

    РЕДАКТИРОВАТЬ

    На подсказке @ Ignacio (1) может быть что-то подобное: http://us2.php.net/manual/en/function.fopen.php#56551

    Если это то, что вам понадобится все время, вы можете попробовать ввести его в командной строке:

     /usr/sbin/setsebool -P httpd_can_network_connect=1 

    Я все еще буду осторожен в отношении обработки файлов PHP за пределами папки www … но надеюсь, что это поможет …!

    (1) http://linux.die.net/man/8/httpd_selinux