/tmp
Ich habe das temporäre Verzeichnis (im Drupal-Administratorpfad ) angegeben admin/config/media/file-system
. Diese Einstellung wird durch Ausführen dpm(file_directory_temp());
von bestätigt devel/php
.
Die Berechtigungen von /tmp/drupal_debug.txt
(einschließlich SELinux-Einstellungen, die ich gelernt habeHier) sind wie folgt:
$ ls -ltZ /tmp/
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 drupal_debug.txt
Wenn ich es außerdem dd("Foo")
aus dem PHP CLI-Tool heraus ausführe,phpsh
Verwendung derDrush-Integrationum eine gebootete Drupal-Umgebung zu erhalten, dann kann ich dd()
problemlos in diese Datei drucken. Muss ich noch etwas tun, damit Apache in diese Datei schreiben kann?
Es sind keine Fehler im Apache-Protokoll vorhanden und das Problem besteht insbesondere auch dann weiterhin, wenn ich ausführe sudo setenforce 0
.
Ein weiterer interessanter Punkt: das PHP-Test-Snippet vondiese StackOverflow-Fragegibt „Success“ zurück, wenn ich es von aus ausführe. devel/php
Mit anderen Worten, Drupal glaubt, dass es in eine beliebige Datei in schreiben kann /tmp
. Wenn ich den Code jedoch in die folgende Form ändere:
$handle = fopen("/tmp/drupal_debug.txt", "x");
if ($handle) echo "Success!";
else print_r(error_get_last());
DannIch erhalte diese Warnung und keine Erfolgsmeldung:
Warnung: fopen(/tmp/drupal_debug.txt): Stream konnte nicht geöffnet werden: Datei ist in eval() vorhanden (Zeile 1 von /srv/www/decipher-storyscope/public_html/decipher/7f/profiles/storyscope/modules/contrib/devel/devel.module(1285): mit eval() erstellter Code).
Das gilt auch, wenn ichlöschendie /tmp/drupal_debug.txt
Datei.
Wie in den Kommentaren erläutert, wird jedoch keine Datei erstellt, wenn dieses Snippet über das Web ausgeführt wird. Eine leere DateiIsterstellt, wenn ich denselben Snippet von der PHP-Befehlszeile aus ausführe.
Achtung.Die Funktion funktioniert einwandfrei, wenn der Code unter Ubuntu installiert und dd()
aufgerufen wird.
Antwort1
Mein Systemadministrator hat mir den Rat gegeben: Legen Sie das tmp
Verzeichnis in /srv/www
.
shell> sudo mkdir /srv/www/my-project/tmp
shell> sudo chmod a+w /srv/www/my-project/tmp
und in Drupal settings.php
:
$conf['file_temporary_path'] = '/srv/www/my-project/tmp';
Dann: tail -f /srv/www/my-project/tmp/drupal_debug.txt
funktioniert.