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 /tmpcartella, 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 tmpin 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_dirfunzione 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: