Big file uploader
Quante volte è capitato di aver bisogno di inviare un file bello cicciottello e scoprire (troppo tardi) che la dimensione massima permessa era di poco inferiore? A me è successo una volta di troppo...
Quindi mi sono messo a pensare a come risolvere la cosa ed ho creato un po' di codice per riunire vari snippet trovati online.
Il "trucco" è semplice: del codice JavaScript si occupa di leggere "chunk" (spezzoni) del file e spedirli ad un programmino in PHP che si occupa di riunirli per formare il file finale.
Farlo bene però non è semplice (ed infatti il codice allegato ha ancora vari problemi). In primo luogo, molti server oramai adottano la Suhosin patch, che impedisce dati binari nella POST (questo l'ho aggirato usando codifica base-64, ma porta ad un overhead del 33%).
Poi bisogna pensare ad un possibile uso malevolo dello script lato server (per esempio per sovrascrivere file arbitrari inviati da altri utenti) o semplicemente al fatto che due utenti provino ad inviare un file con lo stesso nome: questo problema si può risolvere con qualche check extra e o criptando i dati di sessione che vengono reinviati al client dopo ogni chunk (aumenta il traffico) o tenendoli in una sessione PHP (meno traffico, ma p.e. ci si gioca la possibilità di sospendere un upload e riprenderlo in un altro momento).
Purtroppo la mia conoscenza di JavaScript è molto rudimentale, e sicuramente c'è qualcosa di errato (per questo la versione è 0.0Beta! )... Comunque un "qualcosa" di utilizzabile come base c'è. A voi farne buon uso. L'unica richiesta è che, se usate questo metodo per gestire gli upload, indichiate la fonte linkando questa pagina. Se poi mi volete rendere davvero felice, mi potete segnalare i bug presenti...
Attenzione: non ho trovato indicazioni di licenza per base64_encode.
Allegato | Dimensione |
---|---|
uploader-0.0b.tgz | 3.33 KB |