ftp_get在实时服务器上失败(返回false),但在本地工作



我正在尝试使用此脚本从FTP源下载zip文件(在本地主机上它可以工作,但在实时服务器表单OVH上不可以(。

当在实时服务器上运行它时,我立即得到:

  • 成功连接到ftp服务器
  • 登录成功
  • 从…下载时出错
  • 连接已成功关闭

所以所有的连接都很好,但在下载文件时遇到了问题。

可能是什么问题,或者我如何获得一些错误报告?

有些人认为我已经检查过了:

  • 启用FTP支持(在PHP中(
  • 文件夹的权限为777
  • 端口是打开的(21(
  • php最大执行时间长(300(
  • 主机提供的防火墙被禁用(我无法控制是否只是打开/关闭(

还能是什么?

// Connect to FTP server
// Use a correct ftp server
$ftp_server = "localhost";
// Use correct ftp username
$ftp_username="user";
// Use correct ftp password corresponding
// to the ftp username
$ftp_userpass="user";

// Establishing ftp connection
$ftp_connection = ftp_connect($ftp_server, 21)
or die("Could not connect to $ftp_server");
if( $ftp_connection ) {
echo "successfully connected to the ftp server!";

// Logging in to established connection
// with ftp username password
$login = ftp_login($ftp_connection,
$ftp_username, $ftp_userpass);

if($login) {

// Checking whether logged in successfully
// or not
echo "<br>logged in successfully!";

// Name or path of the localfile to
// where the file to be downloaded
$local_file = "file.zip";

// Name or path of the server file to
// be downoaded
$server_file = "file.zip";

// Downloading the specified server file
if (ftp_get($ftp_connection, $local_file,
$server_file, FTP_BINARY)) {
echo "<br>Successfully downloaded from"
. " $server_file to $local_file.";
}
else {
echo "<br>Error while downloading from"
. " $server_file to $local_file.";
}

}
else {
echo "<br>login failed!";
}

// echo ftp_get_option($ftp_connection, 1);
// Closeing connection

if(ftp_close($ftp_connection)) {
echo "<br>Connection closed Successfully!";
}
}
?>

ftp_get问题的最典型原因是PHP默认为FTP活动模式。在99%的情况下,必须切换到FTP被动模式,才能使传输工作。在ftp_login:之后使用ftp_pasv函数

ftp_pasv($connect, true) or die("Passive mode failed");

此外,如果您的FTP服务器在对PASV命令的响应中报告了一个不正确的IP地址(如果服务器位于防火墙/NAT后面,这是很常见的(,您可能需要使用以下方法来解决此问题:

ftp_set_option($connect, FTP_USEPASVADDRESS, false);

请参阅PHP FTP+NAT背后的被动FTP服务器。

尽管在这种情况下,正确的解决方案是修复服务器


如果这些都没有帮助,请使用运行在同一台机器上的任何命令行/GUI FTP客户端测试传输,PHP代码在该机器上运行(即通常在Web服务器上(。如果它也不起作用,那么你就有了一个网络问题,这个问题在你的PHP代码中很难解决。你需要修复网络。也测试来自其他机器的传输,所以请检查问题是在FTP服务器上还是在您的网络服务器(或他们的网络(上

最新更新