在php中使用ftp_get感到困惑

JSw*_*ete 5 php ftp get

我很困惑的是一个地产代理vebra导入脚本,它在移动到另一台服务器之前工作正常,但现在这似乎根本不起作用.

有谁知道为什么我会得到以下警告......

警告:ftp_get()[function.ftp-get]:打开文件传输的数据通道.在第37行的/home/username/public_html/includes/cron/import/vebra-import.php中

警告:ftp_get()[function.ftp-get]:在第37行的/home/username/public_html/includes/cron/import/vebra-import.php中转移确定

这是ftp连接代码:

  $ftp = ftp_connect($ftp_host, 21) or die("FTP Connection Error");

  ftp_login($ftp, $ftp_user, $ftp_pass) or die("Can't Connect to FTP");

  $ftpdir = ftp_nlist($ftp, "/");


  if(!empty($ftpdir) && count($ftpdir) > 0) {

  foreach($ftpdir as $ftpfile) {

      if(preg_match("/\.txt$/", $ftpfile)) {
          $getfile = ftp_get($ftp, $csv_dir.$ftpfile, $ftpfile, FTP_BINARY);
          if($getfile){
              $downloaded++;
          }
          $total++;

      }

  }

  }
  ftp_close($ftp);
Run Code Online (Sandbox Code Playgroud)

此外,它似乎是间歇性的,有时这会成功执行,有时它会因上述错误而失败.

Mar*_*vac 12

您的服务器未处于被动模式,并添加此代码以进行处理:

ftp_pasv($ftp, true);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅php.net上的被动模式:http://php.net/manual/en/function.ftp-pasv.php 被动模式使用客户端而不是服务器发起的数据.所以这就是你不能穿上服务器的原因.如果未设置,则会失败.

注意:ftp_pasv()功能后设置ftp_login()功能.