Upload asincrono con PHP e Ajax
Martedì 5 Dicembre 2006 - 09:42
di Cesare Lamanna

Segnalazione veloce per un esempio completo di codice che consente di implementare un sistema di upload asincrono con PHP e Ajax (usando il classico IFRAME nascosto). L’autore cita come modello l’interfaccia per l’upload di Rapidshare (ancora!) e simili. È valido? Non è valido? Serve? Non serve? Ai posteri (e agli esperti in ascolto) l’ardua sentenza :).
Categoria: Scripting | Permalink
Commenti
1
… non so a voi, ma a me non funziona un granchè … ma in generale diffiderei a prescindere da uno che scrive una funzione come safehtml … quando ce ne sono almeno un paio parte dell’ABC del php quali htmlspecialchars ed htmlentities …
Inoltre mi sembra una cosa abbastanza inutile ed Ajax è schiaffato in mezzo al titolo tanto per fare qualcosa …
Ricapitolando:
1 - lo sviluppatore conosce poco PHP
2 - lo sviluppatore non ha idea di cosa sia Ajax… mi domando perchè una non soluzione come questa, per altro stravecchia, faccia notizia … :incupito:
2
Straquoto andr3a.
Al di là della “bellezza” del codice, non vedo proprio l’utilità di un’interfaccia Ajax per l’upload!
Se è per “while file is uploaded to hidden frame, user can still access web-page and fill “file description” field”, mi vien da dire: ah beh, allora! :-D# - postato da paperogiallo - 05 Dicembre 2006 - 13:05
3
fate qualche esempio voi di code ben fatto? Non è una provocazione :)
# - postato da StErMi - 05 Dicembre 2006 - 14:28
4
Ragazzi, è esattamente il tipo di commento che mi aspettavo e che implicitamente ho sollecitato. La segnalazione di quel tutorial era ben in evidenza su diversi siti di social bookmarking, quelli alla Digg, insomma, dove il numero di click ‘premia’ o dovrebbe premiare qualcosa di buono. Ecco, non mi rimane che ribadire la domanda di Andrea: ‘mi domando perchè una non soluzione come questa, per altro stravecchia, faccia notizia’.
5
@StErMi
Non certo il mio :)
Ma chi mi ha preceduto nel commento, x esempio, ha molto titolo x parlare…@cesare
beh, immagino che la risposta sia “xchè il mondo dello sviluppo-web è fatto anche o soprattutto di gente che cerca: 1) il copia e incolla 2) l’effetto scenico 3) la novità a prescindere”. Ricordi le gif animate? ;)Se l’alternativa è studiare la teoria che sta dietro alle interfacce di navigazione, la degradabilità delle rich application e tutto quello che vi viene in mente di ajax-related, allora è facile leggiucchiare qua e là che il web2.0 è fico, ajax è fico, convincersene senza capire il xchè, poi appena trovi un esempio ajax realmente facile da implementare sul tuo sito, nel dubbio lo aggiungi! :-D
Ma in fondo è umano, prima di capire che conveniva alla lunga studiare, abbiamo tutti copiato, no? :)
# - postato da paperogiallo - 05 Dicembre 2006 - 14:45
6
Beh.. io ho fatto una cosa simile.. solo che l’upload del file ho faccio verso uno script CGI che mi salva su un file una informazione importantissima: la dimensione finale del file
Così tramite php vedo quanto fin’ora ho uploadato e posso calcolare lo stato corrente dell’upload, tramite una bella barra colorata.
Inoltre perl permette di superare il limite nella dimensione del file in upload.
Così ho ottenuto un upload con progress bar in ajax che mi a vedere lo stato corrente dell’upload, che può essere anche di 100 Mb ;)Un’alternativa sarebbe usare quel progetto Flash che permette di fare la stessa cosa (ma con il limite nella dimensione dell’upload) o ancora.. con php 5.2.0 è cambiata la gestione degli uploads e quindi si riesce a ad avere la progress bar anche senza usare perl :)
# - postato da cattivik66 - 05 Dicembre 2006 - 17:29
7
fate qualche esempio voi di code ben fatto? Non è una provocazione :)
StErMi su devpro ci sono 2 scripts da più di un anno, uno usa veramente ajax (upload_progress), l’altro invece usa flash come bridge (FileReference) …. che è lo stesso identico meccanismo dell’ultimo uscito, FlashUpload, scalpore di pochi giorni fa … presente in devpro da un anno e mezzo.
upload_progress a grandi linee fa quello che fa cattivik ma non usa una estensione dedicata, infatti non è detto che vada sempre perchè php non restituisce il nome del file che sta uploadando e quindi la procedura non è proprio delle più sicure in termini di dati … ma almeno usa veramente Ajax, non come questo esempio che di Ajax non ha niente.
Col PHP 5.2 ed APC pare abbiano risolto ma dai miei tests non funziona bene (almeno non su PAMPA) nel senso che non non restituisce niente.
Inutile dire che la YUI è stra superflua, il tutto è replicabile in pochi Kb e se mai riuscirò a configurare bene PAMPA per usare quel metodo scriverò un post apposito che non userà la YUI.
Mi sto documentando anche sulle nuove Stream di PHP5 … ma non so se riescono a raggiungere lo stream in upload … boh.
Il punto è questo:
il post riguarda un esempio che non usa Ajax.
Gli uplad con PHP sono sempre stato un problema perchè richiedevano librerie perl, permessi sul server, estensioni dedicate o altro … un iframe invece non ha nulla a che fare con ajax, e non risolve niente del problema, ovvero non comunica lo stato durante l’upload., l’unica cosa che ci interessa.Quindi ribadisco la mia perplessità su questa notizia, errata (no Ajax), vecchia (sistema di parecchi anni fa) e non troppo pulita (codice client e server abbastanza discutibili).
8
volevo far presente che su pecl è uscito ieri (anzi stanotte direi :D) un modulo che ha alla base la tecnica espressa da andr3a: uploadprogress
E’ in beta, ma son riuscito a testarlo in locale con successo. Beh pian pianino ci siamo avvicinando ad una soluzione decente e pulita :) (avere un CGI solo per fare un upload non mi piace molto come soluzione…)
# - postato da cattivik66 - 06 Dicembre 2006 - 15:58
9
… l’avevo vista ieri … installata con successo ma non va un piffero ^__^
… almeno non su windows (ed il tizio che l’ha fatta ha deto che non l’ha mai testata in win perchè non lo usa e si domanda chi usi win … io per esempio :E)







