无法使用PHP FTP下载一些文件

时间:2013-01-17 15:55:34

标签: php windows apache ftp

我写了一个php脚本,通过FTP下载文件和文件夹,以便我可以在某些条件下进行备份。但是,它不是下载所有文件。它正在从我们的服务器下载一些图像。我无法理解其他图像的错误。它们都是所有国家旗帜的小图像。它们的大小相同。如果我从更多根级别下载,它会下载其他文件。但是,它完全停止了co.png文件。

以下是linkhttp://robi123.com/flags.zip)下载我尝试使用PHP FTP下载的图像文件。

我知道这个脚本可能需要其他改进,或者在下载其他大文件时也会遇到其他步骤。我现在需要帮助来解决这个问题。什么是我的脚本没有下载其他图像? 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/");

?>

Screen shot of error

1 个答案:

答案 0 :(得分:0)

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