PDA

View Full Version : [PHP] - problema upload files


anto_demeter
22-03-2010, 11:29
Ciao ragazzi,
ho un form che fa un semplice upload di un file. Ha sempre funzionato
bene, ma su alcuni file di tipo PDF si blocca. Non è un problema di
dimensioni eccessive, perchè può farlo anche con file di piccole
dimensioni. Semplicemente alcuni file pdf funzionano e altri no, come
se ci fosse qualche blocco a livello del server. La
pagina rimane ferma senza nemmeno arrivare a fare i controlli (e
rispettivi echo).
Avete consigli?
Grazie a tutti

ps: il tutto non restituisce alcun errore, semplicemente si blocca la pagina fino
ad ottenere un timeout.
Secondo me non arriva nemmeno a costruire il $_FILES (altrimenti
arriverebbe a fare echo di debug che ho messo), sembra proprio che
alcuni file PDF vengano semplicemente bloccati a monte (da Apache ad
esempio? ma perchè?) senza criterio (ovvero NON perchè sono troppo
grossi).

anto_demeter
23-03-2010, 09:16
nessuno?! ...UP!

RagingBull
23-03-2010, 12:25
Puoi provare a controllare le impostazioni del webserver. Nell'installazione standard xAMP non si possono caricare file superiori a 2MB ed è posto un limite di esecuzione agli script (ora non ricordo quanto di preciso).

Ad ogni modo, se i tuoi file non superano i 2MB, puoi utilizzare la funzione set_time_limit() (http://php.net/manual/en/function.set-time-limit.php) di PHP per aumentare la durata di esecuzione dello script.

Spero ti sia utile.

anonimizzato
23-03-2010, 12:26
Uhm, che ci siano un blocco a livello di server web mi pare strano ma non conosco tutte le impostazioni di Apache.

Domanda: non è che i file sono corrotti? Riesci a leggerli con AcrobatReader?

lorystorm90
23-03-2010, 14:20
php safe_mode, abilitata?

Magari banalmente non controlli il nome del file per i caratteri non validi "" '' && // etc..
e quando vai a fare la move_uploaded_file() non trova il file di origine..?

Lo fa solo con i file PDF? Prova magari caricare lo stesso file ma con estensione diversa...

anto_demeter
25-03-2010, 10:13
Ragazzi grazie a tutti per i consigli ma niente:

@RagingBull: Non c'è limite di upload perchè altri fiel di dimensioni superiori ai 2 mega li carica tranquillamente senza andare in timeout.

@Sgurbat: ovviamente ho provato ad aprirli e tutti funzionano correttamente e non sono corrotti.

@lorystorm90: provato a cambiare estensione allo stesso file ma non va lo stesso. E comunque non su tutti i file ho questo problema ma lo fa solo su alcuni, è quella la cosa strana.
ps: e la safe_mode è disabilitata.

Altri consigli?

RagingBull
25-03-2010, 12:32
@RagingBull: Non c'è limite di upload perchè altri fiel di dimensioni superiori ai 2 mega li carica tranquillamente senza andare in timeout.

Probabilmente mi sono spiegato male.

Se il file fosse troppo grande non riceveresti un avviso di timeout bensi un messaggio circa l'aver "sforato" con le dimensioni del file.

Il problema del timeout è invece di altra natura.

Uno script rimane in esecuzione dalla prima all'ultima istruzione. E il server conta quanto ci mette per eseguire il tutto. L'operazione di upload di un file non ferma questo conteggio.

Se il conteggio supera il limite imposto dal server, quest'ultimo blocca tutto autonomamente e riporta l'errore di timeout.

Prova ad inserire, ad inizio script, la funzione che ti ho indicato nel post precedente in questo modo:

set_time_limit(1800);

Imposterà il limite di esecuzione dello script a 30 minuti. Dovresti risolvere.

anto_demeter
26-03-2010, 10:08
Probabilmente mi sono spiegato male.

Se il file fosse troppo grande non riceveresti un avviso di timeout bensi un messaggio circa l'aver "sforato" con le dimensioni del file.

Il problema del timeout è invece di altra natura.

Uno script rimane in esecuzione dalla prima all'ultima istruzione. E il server conta quanto ci mette per eseguire il tutto. L'operazione di upload di un file non ferma questo conteggio.

Se il conteggio supera il limite imposto dal server, quest'ultimo blocca tutto autonomamente e riporta l'errore di timeout.

Prova ad inserire, ad inizio script, la funzione che ti ho indicato nel post precedente in questo modo:

set_time_limit(1800);

Imposterà il limite di esecuzione dello script a 30 minuti. Dovresti risolvere.

Caspita...su uno script sembra funzionare... più tardi proverò a impostarlo sugli altri script presenti su altri siti!

Intanto grazie!



EDIT: @RagingBull grazie mille per l'aiuto! Sembra funzionare ovunque lo metta! E nonostance c'avessi pensato non avevo mai provato! ....GRAZIE ANCORA!