6

我被一个房地产代理 vebra 导入脚本弄糊涂了,该脚本在移动到不同的服务器之前运行良好,但现在这似乎根本不起作用。

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

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

警告:ftp_get() [function.ftp-get]: Transfer OK in /home/username/public_html/includes/cron/import/vebra-import.php on line 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);

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

4

2 回答 2

14

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

ftp_pasv($ftp, true);

有关更多信息,请查看 php.net 上的被动模式:http: //php.net/manual/en/function.ftp-pasv.php 被动模式使用客户端而不是服务器发起的数据。所以这就是为什么你不能放在服务器上。如果未设置,它将失败。

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

于 2012-10-13T22:04:51.553 回答
1

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

这就是我修复警告的方式。

于 2014-12-09T10:29:42.433 回答