Ok, smanettando mi sono accorto che il problema era davvero "banale".

Il problema del caricamento file non era dovuto (nel mio caso) a qualcosa di particolarmente strano, non era legato alla direttiva PrivateTmp (ho provato a settarla false ma non è cambiato niente) e non era legato all'encoding del form...molto più semplicemente move_upload_file non riusciva a spostare il file dalla tmp alla cartella definitiva perché, ad un certo punto dello sviluppo e in seguito a chissà quale aggiornamento, la cartella di destinazione deve essere scritta con percorso assoluto e non più relativo, come avevo sempre fatto in passato.

Mi dispiace avervi fatto perdere tempo per una cagata simile ma la faccenda dei percorsi non l'ho proprio presa in considerazione visto che ha sempre funzionato!

-beppe-


Il 15/05/23 17:12, Federico Di Gregorio ha scritto:
On 15/05/23 17:04, Giuseppe Naponiello wrote:
vecchio problema a cui non ho trovato una soluzioni "pulite".

Con l'introduzione di systemd i browser (e tutte le altre applicazioni che ne usufruiscono) non scrivono più in /tmp/ ma in /tmp/systemd-private-xxx-apache2.service.blablabla...non vado oltre perché tanto lo sapete meglio di me di sicuro.

Il problema è che non trovo una soluzione per caricare un file da interfaccia web in una cartella del server: con fetch API e formData mando il file da caricare al server, che con un funzione php dovrebbe spostarlo da tmp alla destinazione finale con la classica funzione "move_upload_file", l'errore, come previsto, è che php cerca il file da spostare in /tmp/ e non in systemd....

sys_get_temp_dir e altre funzioni simili di php mi danno come risultato sempre /tmp/, se però provo "new \SplFileObject("/tmp/tmp-test.txt", "a+");" me lo scrive correttamente in systemd-private.xxx..xyz/tmp/

In php.ini il parametro sys_tmp_dir è commentato perché, dice, se non specificato, di default punta alla cartella tmp di sistema. Non ho provato a modificarlo perché ho letto da qualche parte che non è la soluzione più corretta (ma non ricordo perché).

...ma allora, come diavolo faccio a far caricare agli utenti i loro file, visto che i vecchi script non funzionano più?

Sembra che php venga eseguito in un processo differente da quello di Apache (altrimenti vedrebbe il namespace corretto per /tmp). Puoi dirci se sul sistema c'è anche un service che fa partire PHP? Come viene gestito?

federico


Rispondere a