php - 在 php 中使用 ftp_get 感到困惑

标签 php ftp get

我对一个房地产代理 vebra 导入脚本感到困惑,该脚本在被移动到另一个服务器之前运行良好,但现在这似乎根本不起作用。

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

Warning: ftp_get() [function.ftp-get]: Opening data channel for file transfer. in /home/username/public_html/includes/cron/import/vebra-import.php on line 37

Warning: 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);

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

最佳答案

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

ftp_pasv($ftp, true);

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

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

关于php - 在 php 中使用 ftp_get 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12876790/

相关文章:

Java,发送URL请求并在回复之前关闭?

php - 我的登录表单上出现 undefined index 错误,并且当我尝试登录时没有任何反应

c# - SSH 主机 key 指纹与模式不匹配 C# WinSCP

get - 普通链接重定向到友好的 URL

python - Python FTP 应用程序中的代理

php - PHP 脚本和命令行中的 FTP 失败并显示 553,但 Filezilla 传输正常

javascript - 使用 Express 保存 POST 请求的数据

java - 将 Java hashmap 初始值设定项转换为 PHP 等效项

php - 使用 AJAX 加载具有 html/js 的页面

php - 加入特定键不起作用