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