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