在php中使用ftp_get感到困惑

时间:2012-10-13 20:39:58

标签: php ftp get

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

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

  

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

     

警告:ftp_get()[function.ftp-get]:传入OK   /home/username/public_html/includes/cron/import/vebra-import.php on   第37行

这是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);

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

2 个答案:

答案 0 :(得分:12)

您的服务器未处于被动模式,并将此代码添加到进程:

ftp_pasv($ftp, true);

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

注意:在ftp_pasv()功能之后设置ftp_login()功能。

答案 1 :(得分:0)

使用ftp_pasv()之后,问题仍然存在。我发现服务器的请求数导致防火墙出现问题(我使用foreach()循环滚动浏览多个文件)。因为我没有权限修改防火墙规则,所以在我的脚本中在请求之间添加了sleep()。

这是我修复警告的方法。