Non fidarti della posizione della cartella temporanea fornita da sys_get_temp_dir
se ti trovi in un ambiente di hosting condiviso.
Ecco un'altra cosa da verificare che non è ancora stata menzionata ...
Supponevo, naturalmente, che la cartella in cui il mio script PHP memorizzava i caricamenti di file temporanei fosse /tmp
. Questa convinzione è stata rafforzata dal fatto che echo sys_get_temp_dir() . PHP_EOL;
ritorna /tmp
. Anche,echo ini_get('upload_tmp_dir');
non restituisce nulla.
Per verificare che il file caricato appaia brevemente nella mia /tmp
cartella, ho aggiunto una sleep(30);
dichiarazione al mio script (come suggerito qui ) e sono passato al mio/tmp
cartella in cPanel File Manager per individuare il file. Tuttavia, qualunque cosa accada, il file caricato non si trovava da nessuna parte.
Ho trascorso ore a cercare di determinare il motivo di ciò e ho implementato tutti i suggerimenti offerti qui.
Alla fine, dopo aver cercato i file del mio sito Web per la query tmp
, ho scoperto che il mio sito conteneva altre cartelle denominate tmp
in directory diverse. Mi sono reso conto che il mio script PHP stava effettivamente scrivendo i file caricati su .cagefs/tmp
. (Il "Mostra file nascosti" impostazione deve essere abilitata in cPanel per visualizzare questa cartella.)
Quindi, perché la sys_get_temp_dir
funzione restituisce informazioni inaccurate?
Ecco una spiegazione dalla pagina Web di PHP.net per sys_get_temp_dir
(ovvero il commento principale):
Se in esecuzione su un sistema Linux in cui systemd ha PrivateTmp = true (che è l'impostazione predefinita su CentOS 7 e forse altre distribuzioni più recenti), questa funzione restituirà semplicemente "/ tmp", non il percorso vero, molto più lungo, in qualche modo dinamico.
Questo post SO approfondisce anche il problema: