Vertrauen Sie nicht dem Speicherort des temporären Ordners, der von angegeben wird, sys_get_temp_dir
wenn Sie sich in einer gemeinsam genutzten Hosting-Umgebung befinden.
Hier ist noch eine Sache zu überprüfen, die noch nicht erwähnt wurde ...
Ich nahm natürlich an, dass der Ordner, in dem mein PHP-Skript temporäre Datei-Uploads gespeichert hatte, war /tmp
. Dieser Glaube wurde durch die Tatsache verstärkt, dass echo sys_get_temp_dir() . PHP_EOL;
zurückkehrt /tmp
. Auch echo ini_get('upload_tmp_dir');
gibt nichts zurück.
Um zu überprüfen, ob die hochgeladene Datei tatsächlich kurz in meinem /tmp
Ordner angezeigt wird, habe ich sleep(30);
meinem Skript eine Anweisung hinzugefügt (wie hier vorgeschlagen ) und /tmp
im cPanel-Dateimanager zu meinem Ordner navigiert , um die Datei zu suchen. Unabhängig davon war die hochgeladene Datei dort nirgends zu finden.
Ich habe stundenlang versucht, den Grund dafür zu ermitteln, und jeden hier angebotenen Vorschlag umgesetzt.
Nachdem ich meine Website-Dateien nach der Abfrage durchsucht hatte tmp
, stellte ich schließlich fest, dass meine Website andere Ordner enthielt, die tmp
in verschiedenen Verzeichnissen benannt waren. Ich stellte fest, dass mein PHP-Skript tatsächlich die hochgeladenen Dateien in schrieb .cagefs/tmp
. (Die Einstellung "Versteckte Dateien anzeigen " muss in cPanel aktiviert sein, damit dieser Ordner angezeigt werden kann.)
Warum gibt die sys_get_temp_dir
Funktion ungenaue Informationen zurück?
Hier ist eine Erklärung von der PHP.net-Webseite für sys_get_temp_dir
(dh den obersten Kommentar):
Wenn auf einem Linux-System mit systemd PrivateTmp = true ausgeführt wird (dies ist die Standardeinstellung unter CentOS 7 und möglicherweise anderen neueren Distributionen), gibt diese Funktion einfach "/ tmp" zurück, nicht den wahren, viel längeren, etwas dynamischen Pfad.
Dieser SO-Beitrag befasst sich auch mit dem Thema: