Upload di file via ftp tramite php
Tramite specifiche funzioni php è possibile avviare una sessione ftp per trasferire dei file da un server ad un altro, per farlo prendere come esempio il seguente codice:
<?php
// indirizzo del server ftp su cui fare l’upload del file
$ftp_server = "ftp.ftpserver.com";
// username del server ftp
$ftp_user_name = "username";
// password del server ftp
$ftp_user_pass = "password";
// nome del file locale da trasferire
$local_file = "local_dir/local_file";
// nome del file di destinazione
$destination_file = "dest_dir/dest_file";
// Connessione al server ftp
$conn_id = ftp_connect($ftp_server);
// Risultato della connessione
if (!$conn_id) {
echo "Impossibile connettersi al server $ftp_server!";
die();
}
else {
echo "Connesso a $ftp_server.\n";
}
// Login sul server
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// Risultato del login
if (!$login_result) {
echo "Login fallito!";
die();
}
else {
echo "Login ok.";
}
// Trasferimento del file
if (ftp_put($conn_id, $destination_file, $local_file, FTP_ASCII)) {
echo "$local_file trasferito!\n";
}
else {
echo "Errore durante il trasferimento di $local_file\n";
}
// Chiusura della connessione
ftp_close($conn_id);
?>
// indirizzo del server ftp su cui fare l’upload del file
$ftp_server = "ftp.ftpserver.com";
// username del server ftp
$ftp_user_name = "username";
// password del server ftp
$ftp_user_pass = "password";
// nome del file locale da trasferire
$local_file = "local_dir/local_file";
// nome del file di destinazione
$destination_file = "dest_dir/dest_file";
// Connessione al server ftp
$conn_id = ftp_connect($ftp_server);
// Risultato della connessione
if (!$conn_id) {
echo "Impossibile connettersi al server $ftp_server!";
die();
}
else {
echo "Connesso a $ftp_server.\n";
}
// Login sul server
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// Risultato del login
if (!$login_result) {
echo "Login fallito!";
die();
}
else {
echo "Login ok.";
}
// Trasferimento del file
if (ftp_put($conn_id, $destination_file, $local_file, FTP_ASCII)) {
echo "$local_file trasferito!\n";
}
else {
echo "Errore durante il trasferimento di $local_file\n";
}
// Chiusura della connessione
ftp_close($conn_id);
?>
Novembre 20th, 2007 at 20:10
Molto bello lo script.. Peccato che non mi funziona.. Probabilmente sbaglio la la scrittura del $local_file..
Io lo scrivo così:
$local_file = “/home/dumbsim/win_xp/pittogrammi/freeware.png”;
C’è qualcosa di sbagliato?
Novembre 21st, 2007 at 11:53
Se il file esiste in quella locazione è giusto.
Ricordati che il nome del file lo devi mettere anche in $destination_file, quindi nel tuo caso:
$destination_file = “freeware.png”;
Tutto questo sempre che riesci a superare la procedura di login, fammi sapere.
Novembre 21st, 2007 at 17:48
//faccio l’upload del file
$file = ftp_put ($stream, “trick.txt”, “/home/dumbsim/Documenti/trick.txt”, FTP_ASCII);
//controllo l’upload del file
if ($file) {echo “Il file è stato uploadato con successo.”;}
else {echo “Il file non è stato uploadato con successo.”;}
io uso questo codice. e come output mi dice: Il file non è stato uploadato con successo.
Dove potrebbe essere l’errore? La connessione funziona, il login viene effettuato, se gli dico di creare o cancellare una cartella funziona.
Novembre 21st, 2007 at 18:16
Una motivazione che mi viene in mente è che il file che stai tentando di caricare è abbastanza grande e l’upload non finisce nei 30 secondi massimi che ha a disposizione uno script php. In tal caso ti basta mettere l’istruzione
set_time_limit(0);
come prima istruzione dello script.
Altra possibile motivazione può essere che il server ftp su cui tenti di fare l’upload necessiti una connessione passiva e non attiva, in tal caso appena dopo il login usa l’istruzione
ftp_pasv($conn_id, true);
per abilitare la modalita passiva sulla connessione.
Aprile 8th, 2008 at 17:58
ciao nn riesco a fare funzionare il codice o meglio quando carico il file e dovrebbe salvarlo con ftp_put mi dà il seguente errore Permission denied
a cosa è dovuto ? come faccio a risolverlo ? attendo una tua risposta grazie
Aprile 8th, 2008 at 21:51
Ciao, come puoi ben intuire dal messaggio di errore il problema consiste nel fatto che l’utente con cui fai il login non ha i permessi necessari per scrivere nella directory nella quale stai tentando di fare l’upload. Usando un qualsiasi client ftp, loggandoti con lo stesso username e password e tentando di caricare lo stesso file nella stessa directory dovresti ottenere lo stesso errore. Prova a cambiare (se puoi) i permessi della directory mettendo il permesso di scrittura a tutti gli utenti e vedi se cosi funziona