Newsgroup: it.comp.www.php
Titolo: upload php-ftp: problema (lungo)

Buongiorno a tutti, da un po' ho un problema che non riesco a risolvere.
Dopo svariati test e tentativi e ricerche su internet e newsgroup, mi
rivolgo a voi nella speranza di trovare una soluzione.
Devo realizzare una procedura di upload file in php, utilizzando istruzioni
che permettano il caricamento ftp. L'utente non deve far altro che
"sfogliare", selezionare un file e premere il pulsantino "upload".
Per completezza riporto in seguito il codice della pagina 1 (form di
selezione file) e della funzione di upload.
In coda al messaggio riporto i dettagli sull'errore restituito.
//PAGINA 1: FORM DI UPLOAD
<html>
<body marginwidth=4 marginheight=4 topmargin=4 leftmargin=4 bgcolor=white
vlink="#0000ff" link="#0000ff">
<form action="include/_ftp.php"  method=POST enctype="multipart/form-data"
name="Attachments">
  <input type=hidden name=box value="">
<tr>
<td nowrap width="1%">&nbsp;&nbsp;<b>Image:</b></td>
<td colspan=2>
<input type=file name=source_file size=20>
<input type="hidden" name="MAX_FILE_SIZE" value="83886080">
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
</tr>
<input type=submit name=btnSubmit value=Submit size=20 style="border: 1px
solid #0000FF"></form>
</body>
</html>
//PAGINA 2: CODICE PER IL TRASFERIMENTO FTP
<?php
 $ftp_server="xxx";
 $ftp_user_name="xxx";
 $ftp_user_pass="xxx";
 // set up basic connection
 $conn_id = ftp_connect($ftp_server);
 // login with username and password
 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
 // check connection
 if ((!$conn_id) || (!$login_result)) {
     echo "FTP connection has failed!";
     echo "Attempted to connect to $ftp_server for user $ftp_user_name<br>";
     exit;
    } else {
     echo "Connected to $ftp_server, for user $ftp_user_name<br>";
    }
// turn passive mode on
ftp_pasv($conn_id, true);
//directorylike /
www.velibaba.com/images
echo "<br>chdir public: ".ftp_chdir($conn_id, "public");
echo "<br>timeout: ".ftp_get_option($conn_id, FTP_TIMEOUT_SEC);
echo "<br>autoseek: ".ftp_get_option($conn_id, FTP_AUTOSEEK);
$destination_file="_x.tmp";
echo ("<br>");
echo ("<br>$destination_file ==> $source_file ( $_POST[source_file] )<br>");
echo ("<br>");
// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
// check upload status
if (!$upload) {
       echo "FTP upload has failed!";
   } else {
       echo "Uploaded $source_file to $ftp_server as $destination_file";
   }
// close the FTP stream
ftp_quit($conn_id);
?>
Ho testato lo stesso codice su 3 diversi siti, situati su tre diversi server
di cui uno linux e gli altri windows.
Risultato: su due host (uno linux e uno windows 2000) non ci sono problemi e
l'output a video è il seguente:
Connected to xxx, for user xxx
chdir public: 1
timeout: 90
autoseek: 1
Uploaded C:\WINNT\TEMP\php1759.tmp to hosthosthost as _x.tmp
Sul terzo, alcuni file vengono caricati, ma la maggior parte no.
Apparentemente non ci sono criteri... i file caricati sono di svariate
dimensioni e contenuto, come quelli non caricati. Insomma, non sembra un
problema di dimensioni del file o altro.
Il risultato, a video, è il seguente:
Connected to xxx, for user xxx
chdir public: 1
timeout: 90
autoseek: 1
FTP upload has failed!
Quindi l'istruzione:
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
restituisce semplicemente un bello zero.........
Ho provato a cambiare un po' il codice, ftp passivo, autoseek, FTP_ASCII al
posto di binary ecc... ma... nessun cambiamento.
Brancolo nel buio.
Qualcuno sa darmi una mano?
Spero di aver documentato tutto con completezza e non aver dimenticato
nulla.
Grazie anticipate.
_______________________
Emanuele

 che permettano il caricamento ftp. [...]
Stai confondendo il POST HTTP di un multipart/form-data (che e' una cosa)
con il protocollo FTP (che e' un'altra).
Se vuoi usare il primo, il secondo script non ha senso e devi usare il codice
come riportato nel manuale del PHP per acquisire il file uploadato.
Se vuoi usare il secondo, il primo script non ha senso, ma devi riportare
un'ancora allo spazio FTP (ftp://...) dove caricare i file.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it