He designado el directorio tmp /tmp
(en la ruta de administración de Drupal admin/config/media/file-system
). Esta configuración se confirma ejecutando dpm(file_directory_temp());
desde devel/php
.
Los permisos de /tmp/drupal_debug.txt
(incluida la configuración de SELinux, que aprendí sobreaquí) son así:
$ ls -ltZ /tmp/
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 drupal_debug.txt
Además, si ejecuto dd("Foo")
desde la herramienta PHP CLIphpsh
utilizando elintegración drushpara obtener un entorno Drupal arrancado, entonces puedo usarlo dd()
para imprimir en este archivo sin problemas. ¿Debo hacer algo adicional para permitir que Apache escriba en este archivo?
No hay errores en el registro de Apache y, en particular, el problema persiste incluso cuando ejecuto sudo setenforce 0
.
Otro punto interesante: el fragmento de prueba de PHP deesta pregunta de StackOverflowdevuelve "Éxito" cuando lo ejecuto desde devel/php
. En otras palabras, Drupal siente que puede escribir en un archivo arbitrario en /tmp
. Sin embargo, si modifico el código a la siguiente forma:
$handle = fopen("/tmp/drupal_debug.txt", "x");
if ($handle) echo "Success!";
else print_r(error_get_last());
entoncesRecibo esta advertencia y ningún mensaje de éxito:
Advertencia: fopen(/tmp/drupal_debug.txt): no se pudo abrir la secuencia: el archivo existe en eval() (línea 1 de /srv/www/decipher-storyscope/public_html/decipher/7f/profiles/storyscope/modules/contrib/ devel/devel.module(1285): código evaluado().
Esto es cierto incluso si yoborrarel /tmp/drupal_debug.txt
archivo.
Sin embargo, como se comenta en los comentarios, no se crea ningún archivo al ejecutar este fragmento en la web, mientras que un archivo vacíoescreado si ejecuto el mismo fragmento desde la línea de comando de PHP.
NÓTESE BIEN.La función funciona bien cuando el código está instalado y dd()
llamado en Ubuntu.
Respuesta1
Recibí un consejo de mi administrador de sistemas: coloque el tmp
directorio en /srv/www
.
shell> sudo mkdir /srv/www/my-project/tmp
shell> sudo chmod a+w /srv/www/my-project/tmp
y en Drupal settings.php
:
$conf['file_temporary_path'] = '/srv/www/my-project/tmp';
Entonces: tail -f /srv/www/my-project/tmp/drupal_debug.txt
funciona.