Я обозначил каталог 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.