Назад | Перейти на главную страницу

PHP / Apache не может ничего писать

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

После просмотра журналов ошибок кажется, что PHP выдает ошибки, говоря, что каталог загрузки недоступен для записи. Этот каталог находится за пределами корневого веб-каталога, но нет open_basedir ограничения на сервере.

У меня есть тестовый скрипт, который выполняет следующий код:

$path = '/var/www/vhosts/testdir';
$writable = is_writable($path) ? 'is writable' : 'is not writable';

echo "$path $writable";

Когда я запускаю сценарий из командной строки с php test.php каталог доступен для записи. Однако когда я открываю страницу из браузера, она недоступна для записи.

И корневой веб-каталог, и testdir принадлежат к одному пользователю и группе и имеют 755 разрешения установлены. Я пытался установить владельца обоих каталогов на apache но безрезультатно.

Когда я устанавливаю разрешения для каталога загрузки на 777 это работает, но, очевидно, я не хочу, чтобы все мои файлы были доступны для чтения и выполнения всем.

Дистрибутив - CentOS 6.7.

Я упустил что-то очевидное?

Пользователь или группа, запускающая httpd, должны иметь доступ на запись. PHP наследует это от httpd.

Ваша проблема почти наверняка SELinux. Файлы и каталоги за пределами корневого веб-сайта вряд ли будут иметь правильный контекст SELinux, например. httpd_sys_content_t.

Вам нужно будет изменить контекст SELinux для файлов / каталогов, в которые вы хотите иметь возможность писать.