PHP – ftp_put + Copia l'intera struttura delle cartelle

Sto cercando di creare uno script FTP che copi una struttura di cartelle locale fino a un punto FTP. Fondamentalmente per aggiornare un sito web.

Ho provato il seguente codice (ho cambiato utente / pass / dominio) ma la connessione non ha esito negativo e sembra funzionare.

$server = 'ftp.domainname.co'; $ftp_user_name = 'user'; $ftp_user_pass = 'pass'; $dest = '.'; $source = '.'; $mode = 'FTP_ASCII'; $connection = ftp_connect($server); $login = ftp_login($connection, $ftp_user_name, $ftp_user_pass); if (!$connection || !$login) { die('Connection attempt failed!'); } $upload = ftp_put($connection, $dest, $source, $mode); if (!$upload) { echo 'FTP upload failed!'; } ftp_close($connection); 

Sono fiducioso che il punto che sta rompendo è la linea ftp_put. Le mie domande sono:

  1. È ansible ftp_put caricare un'intera struttura di directory con file ecc o è sufficiente caricare un file alla volta? C'è un command diverso che dovrei usare?

  2. Penso di avere qualcosa di sbagliato in queste variables:

      $dest = '.'; $source = '.'; $mode = 'FTP_ASCII'; 

Credo che la modalità sia corretta.

$ dest – questa è solo la radice del server ftp che è ftp.domainname.co – dovrei inserire il nome del server ftp o cosa va qui.

$ fonte – questo è un path locale corrente – Ho anche provato il path C: \ etc completo.

Ottengo questo errore: Attenzione: ftp_put () si aspetta che il parametro 4 sia lungo

Qualsiasi aiuto sarebbe grande.

grazie

Non funziona perché si aspetta un file, non una directory. Il manuale PHP per ftp_put contiene alcuni esempi di codice per i caricamenti di file ricorsivi pubblicati dai commentatori.

Ecco uno di questi (si noti che richiede un path completo):

 function ftp_putAll($conn_id, $src_dir, $dst_dir) { $d = dir($src_dir); while($file = $d->read()) { // do this for each file in the directory if ($file != "." && $file != "..") { // to prevent an infinite loop if (is_dir($src_dir."/".$file)) { // do the following if it is a directory if ([email protected]_chdir($conn_id, $dst_dir."/".$file)) { ftp_mkdir($conn_id, $dst_dir."/".$file); // create directories that do not yet exist } ftp_putAll($conn_id, $src_dir."/".$file, $dst_dir."/".$file); // recursive part } else { $upload = ftp_put($conn_id, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY); // put the files } } } $d->close(); } 
 Warning: ftp_put() expects parameter 4 to be long 

Bene, a me sembra abbastanza ovvio: il parametro 4 deve essere "lungo" (o: un numero). In questo caso può anche essere un CONSTANT che rappresenta quel numero, come ftp_put(x, y, z, FTP_ASCII) . Non con le virgolette ('), come hai fatto tu: ftp_put(x, y, z, 'FTP_ASCII')