我对一个房地产代理 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/