0

我编写了一个 php 脚本来通过 FTP 下载文件和文件夹,这样我就可以在某些条件下进行备份。但是,它不是下载所有文件。它正在从我们的服务器下载一些图像。我无法理解其他图像有什么问题。它们都是各国国旗的小图像。它们大小相同。如果我从更多根级别下载,它会下载其他文件。但是,它恰好从 co.png 文件停止。

这是下载我尝试使用 PHP FTP 下载的图像文件的链接( http://robi123.com/flags.zip )。

我知道这个脚本在下载其他大文件时可能需要其他改进或陷入其他步骤。我现在需要帮助来解决这个问题。我的脚本没有下载其他图像是什么?这个问题附有php的警告。我还有一个想法可以尝试执行 RAW FTP 命令。忽略 RAW FTP 命令的代码。但是 ftp 下载的所有其他方法(ftp_get、ftp_nb_get 和)都卡在同样的事情和同样的警告中。但是您可以提供任何建议。

这是我的代码:

<?php
set_time_limit(0);
ini_set('xdebug.max_nesting_level', "100000000000000000000000");

$ftp_server = "";
$ftp_user    = "";
$ftp_pass = "";

$ftp_conn   = ftp_connect($ftp_server);
$ftp_login   = ftp_login($ftp_conn, $ftp_user, $ftp_pass);

ftp_set_option($ftp_conn, FTP_TIMEOUT_SEC, 10000000);

ftp_set_option($ftp_conn, FTP_AUTOSEEK, true);

ftp_pasv($ftp_conn, true);

if ((!$ftp_conn) || (!$ftp_login)) {
    echo "FTP connection has failed!";
    echo "Attempted to connect to $ftp_server for user $ftp_user<br />";
} else {
    echo "Connected to $ftp_server, for user $ftp_user<br />";
}


echo getcwd()."<br />" ;

function download($ftp_conn,$local_folder,$remote_folder){

     if($local_folder !=""){
     chdir($local_folder);
     }
     echo getcwd()."<br />" ;

     ftp_chdir($ftp_conn,$remote_folder);

     $files_folders = ftp_nlist($ftp_conn, ".");

     foreach($files_folders as $temp){

      if ($temp == '.' OR $temp == '..'){ 
      continue;
      }
      if(ftp_is_dir($ftp_conn,$temp)){
      //echo "$temp<br>";

      @mkdir($temp);

      echo "Folder: ".$remote_folder."/".$temp."<br />";

      download($ftp_conn,$temp,$remote_folder."/".$temp);

      }else{
      ftp_get($ftp_conn, $temp, $temp, FTP_BINARY);
      //ftp_nb_get($ftp_conn, $temp, $temp, FTP_BINARY); 

      /*

        $ret = ftp_nb_get($ftp_conn, $temp, $temp, FTP_BINARY);
        while ($ret == FTP_MOREDATA) {

        $ret = ftp_nb_continue($ftp_conn);
        }
        if ($ret != FTP_FINISHED) {
        echo "There was an error downloading the file";
        exit(1);
        }

      $command = "RETR $remote_folder/$temp";
      $result = ftp_raw($ftp_conn, trim($command));  
      print_r($result);
       */
      echo "File: $temp<br />";

      }

     }

     chdir("..");
     ftp_chdir($ftp_conn, "..");

     return;

}

function ftp_is_dir($ftp_conn,$dir) {
  if (@ftp_chdir($ftp_conn, $dir)) {
    ftp_chdir($ftp_conn, '..');
    return true;
  } else {
    return false;
  }
}

download($ftp_conn,"data","/public_html/c4smod/traffic/Img/Flags/");

?>

错误截图

4

1 回答 1

0

我发现了问题。在我下载了几张图片后,我的脚本只需要重新连接到服务器并下载其余的图片。所以,我只是添加了额外的条件来检查 ftp 功能是否失败并且它们被重新连接并重试以继续下载文件和图像。我没有试图进一步寻找并知道 ftp 会话或超时存在多长时间,或者这些问题是否与我的脚本有关。

于 2013-02-26T21:30:46.277 回答