Designei o diretório tmp como /tmp
(no caminho de administração do Drupal admin/config/media/file-system
). Essa configuração é confirmada executando dpm(file_directory_temp());
de devel/php
.
As permissões de /tmp/drupal_debug.txt
(incluindo as configurações do SELinux, que eu aprendi sobre aqui ) são assim:
$ ls -ltZ /tmp/
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 drupal_debug.txt
Além disso, se eu executar dd("Foo")
na ferramenta CLI do PHP phpsh
usando o integração de drenagem para obter um ambiente Drupal autoinicializado, então eu posso usar dd()
para imprimir neste arquivo sem problema. Existe algo adicional que eu preciso fazer para permitir que o Apache escreva neste arquivo?
Não há erros no log do Apache e, principalmente, o problema persiste mesmo quando eu executo sudo setenforce 0
.
Outro ponto interessante: o snippet de teste do PHP de esta pergunta StackOverflow retorna" Success "quando eu o executo a partir de devel/php
, em outras palavras, o Drupal acha que pode gravar em um arquivo arbitrário em /tmp
. No entanto, se eu modificar o código para o seguinte formato:
$handle = fopen("/tmp/drupal_debug.txt", "x");
if ($handle) echo "Success!";
else print_r(error_get_last());
então recebo este aviso e nenhuma mensagem de sucesso:
Warning: fopen(/tmp/drupal_debug.txt): failed to open stream: File exists in eval() (line 1 of /srv/www/decipher-storyscope/public_html/decipher/7f/profiles/storyscope/modules/contrib/devel/devel.module(1285) : eval()'d code).
Isso é verdadeiro mesmo se eu apagar o arquivo /tmp/drupal_debug.txt
.
No entanto, como discutido nos comentários, nenhum arquivo é criado ao executar este fragmento pela web, enquanto que um arquivo vazio é criado se eu executar o mesmo snippet a partir da linha de comando do PHP. / p>
NB. A função funciona bem quando o código é instalado e dd()
é chamado no Ubuntu.