Newsgroup: it.comp.www.php
Titolo: switch automatico tra ftp e http

Ciao,
vorrei fare un sistema per cui, se il file che 
viene caricato č grosso, venga utilizzato il 
protocollo ftp.
Secondo voi č possibile ed intelligente 
utilizzare un sistema automatico, del tipo
if ($_FILES['file']['size'] > blabla) {
	usa ftp ---
}
?
Il mio dubbio č: il post_max_size (o 
upload_max_size?) si frappone tra la cartella 
tmp e quella definitiva, oppure tra il client e 
tmp?
Oppure dovrei fare una interfaccia 'brutal' dove 
il cliente cekka la dimensione del file, e 
sceglie http oppure ftp? ...
ciao e grazie!...
m.

 dimensione del file, e sceglie http oppure ftp? ...
Se il tuo server non accetta file superiori a x mega unico modo per 
caricarli sarebbe quello di usare ftp... Quindi non c'entra http/ftp 
visto che per caricare i file via ftp dovresti cmq caricarlo prima via post.

 ?
Come ti è già stato risposto, quando inserisci il campo file in un form, 
l'upload viene fatto automaticamente mediante post.
Una volta poi che il file si trova nella cartella temporanea, puoi 
spostarlo con move_uploaded_file() oppure (nel caso di problemi dovuti a 
safe_mode e permessi) con ftp.
Tuttavia ciò è sempre vincolato alle impostazioni del PHP.
Per poter fare qualcosa di diverso, che non sia limitato da 
upload_max_size e post_max_size devi ricorrere a escamotage di altro genere.
Onestamente non so bene come, ma forse con javascript puoi fare qualcosa.
A tal proposito ti consiglierei di scaricare MD-Pro da 
www.maxdev.it
 e 
cercare di studiarti il funzionamento del modulo RTE. Si tratta di un 
editor (in stile word) per la scrittura online e via browser di articoli 
ecc.
Questo modulo ha una interfaccia tutta sua per l'upload di files su 
server, con tanto di browser delle cartelle del server, che non dovrebbe 
  risentire dei l imiti su descritti.
Ciao

 upload_max_size e post_max_size devi ricorrere a escamotage di altro genere.
Si puo' ricorrere all'FTP.
Soluzione 1: dai la possibilita' all'utente registrato di impostare
come preferenza se vuole l'upload HTTP oppure l'upload FTP. Quando
devi presentare un input di file decidi, in base alla preferenza,
se mostrare un normale control HTML <input type=file oppure mostrare
un'ancora ad un account FTP creato all'uopo. Quando ricevi il submit,
in base alla preferenza decidi se acquisire il file da $_FILE[] oppure
dall'account FTP.
Soluzione 2: e' una variante della precedente. Quando hai un form che
prevede un upload, mostri sia il control HTML, sia l'ancora. Quando
ricevi il submit vai a vedere sia $_FILE[], sia l'account FTP. Esempio
(a memoria):
<form method=post enctype="multipart/form-data" action=...>
File:
<input type=file name=il_file size=50><br>
<a target=new
href="
ftp://ftpuploads
:<?= $PASSWORD ?>@
www.xxx.it/ftpuoloads/
<?= TMPDIR ?>">
<input type=submit name=b value=Salva>
</form>
Il codice di acquisizione:
if( $_FILES[] contiene un file ){
    Accetta questo file, il cui tipo e' dato da $_FILES['il_file'][type]
} else {
    Vai a vedere nell'account FTP usando le apposite funzioni di libreria
    per esplorare il contenuto della dir. $TMP_DIR. Il tipo dei file,
    in questo caso, andra' dedotto dalla estensione. Attenzione che ci
    possono essere zero, uno o piu' files o directories.
}
Osservazione 1: l'account FTP deve essere "blindato". La password
va cambiata periodicamente. I permessi sulla dir. principale
dell'account devono vietare il listing. Per ogni upload devi creare
nella dir. dell'account una sotto-dir.  dal nome non prevedibile. Dopo
l'upload questa dir. temporanea va cancellata.  In questo modo se anche
persone indesiderate accedono all'account, lo trovano vuoto e non vedono
i file degli altri.
Osservazione 2: e' un po' complicato, ma il codice e' riciclabile.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it