1

Я обозначил каталог tmp как /tmp (по пути администратора Drupal admin/config/media/file-system). Этот параметр подтверждается запуском dpm(file_directory_temp()); от devel/php .

Разрешения /tmp/drupal_debug.txt (включая настройки SELinux, о которых я узнал здесь) выглядят примерно так:

$ ls -ltZ /tmp/
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 drupal_debug.txt

Кроме того, если я запускаю dd("Foo") из инструмента PHP CLI phpsh используя интеграцию drush, чтобы получить загрузочную среду Drupal, то я могу использовать dd() для печати в этот файл без проблем. Есть ли что-то дополнительное, что мне нужно сделать, чтобы позволить Apache писать в этот файл?

В журнале Apache ошибок нет, и, в частности, проблема сохраняется, даже когда я запускаю sudo setenforce 0 .

Еще один интересный момент: фрагмент теста PHP из этого вопроса StackOverflow возвращает "Success", когда я запускаю его из devel/php , другими словами, Drupal чувствует, что может записать в произвольный файл в /tmp . Однако, если я изменю код на следующую форму:

 $handle = fopen("/tmp/drupal_debug.txt", "x");
 if ($handle) echo "Success!";
 else print_r(error_get_last());

тогда я получаю это предупреждение, а сообщение об успехе отсутствует:

Предупреждение: fopen(/tmp/drupal_debug.txt): не удалось открыть поток: файл существует в eval() (строка 1 из /srv /www /decipher-storyscope /public_html /decipher /7f /profile /storyscope /modules /contrib /devel /devel.module (1285): код eval()).

Это верно, даже если я удалю файл /tmp/drupal_debug.txt .

Однако, как обсуждалось в комментариях, при запуске этого фрагмента через Интернет файл не создается, в то время как пустой файл создается, если я запускаю тот же фрагмент из командной строки PHP.

NB. Функция отлично работает, когда код установлен и dd() вызывается в Ubuntu.

1 ответ1

1

Я получил совет от моего системного администратора: поместите каталог tmp в /srv/www .

shell> sudo mkdir /srv/www/my-project/tmp
shell> sudo chmod a+w /srv/www/my-project/tmp

и в settings.php:

$conf['file_temporary_path'] = '/srv/www/my-project/tmp';

Затем: tail -f /srv/www/my-project/tmp/drupal_debug.txt работает.

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