2

У меня VPS работает на CentOS 6 и apache2 в качестве веб-сервера. У меня на сервере запущено несколько PHP-скриптов, и все идет гладко, кроме записи файлов. По некоторым причинам мои PHP-скрипты не могут писать или создавать файлы.

Я использую местоположение по умолчанию /var/www/html/ которое принадлежит root:root .

Я попытался временно CHMODing каталогов и файлов, но безуспешно.
Я также попытался установить права доступа к папке 777, тот же результат - безуспешно.

Это довольно странно, и я новичок в управлении VPS.

Я добавил строку журнала ошибок PHP в php.ini и сказал, чтобы она сохранялась в /var/log/

2 ответа2

2

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

Если вы все еще новичок, я бы порекомендовал вам проводить время с выключенным SELinux, а затем, когда у вас все работает, вы можете включить его и начать переконфигурировать.

NB: Реальный способ ведения дел противоположен: начните с полностью заблокированной системы и поочередно включайте то, что вам нужно.

0

Вы никогда не должны использовать /var/www/html для хранения ваших файлов. Он не предназначен для использования в качестве временного хранилища. PHP-скрипт должен возвращать сгенерированный html, а не записывать его в файл.

Если вам действительно нужно где-то хранить данные, вы должны создать новую папку с правами доступа. В Linux часто nobody является учетной записью пользователя, работающей под Apache, но это также может быть www-data или просто apache. Вы можете предоставить apache доступ к этой папке:

chown nobody:nobody <dirname>

Установка слишком большого количества разрешений для папки также может привести к ошибкам, если Apache настроен на запрет выполнения файлов с разрешениями 777 (доступно для записи).

Очень простой способ сделать все правильно - это сначала позволить PHP создать сам каталог:

<?php
 $dir = 'path-to-folder/myFolder';
 if ( !file_exists($dir) )
   mkdir ($dir, 0777);
 file_put_contents ($dir.'/test.txt', 'Hello World');

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .