【问题标题】:Confused using ftp_get in php在 php 中使用 ftp_get 感到困惑
【发布时间】:2012-10-13 20:39:58
【问题描述】:

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

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

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

警告:ftp_get() [function.ftp-get]: Transfer OK in /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);

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

【问题讨论】:

    标签: php ftp get


    【解决方案1】:

    你的服务器不是被动模式,添加这段代码来处理:

    ftp_pasv($ftp, true);
    

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

    注意:在ftp_login() 函数之后设置ftp_pasv() 函数。

    【讨论】:

    • 我试过了,但这又产生了更多的错误,但出于某种原因,它成功了吗?有点奇怪。感谢您的帮助
    • php_connect_nonb() failed: Operation now in progress (115) 是错误
    • 呵呵,应该可以了,试试升级FTP版本或者绕过防火墙,看看这个bugs.php.net/bug.php?id=47110
    • 啊它现在可以工作了,但是当我第一次尝试使用 ftp_pasv() 时,这是我遇到的错误,这就是我将其取出的原因。但是就像我说它现在可以工作了,所以感谢您的帮助:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      相关资源
      最近更新 更多