在这上面花了几个小时,我不走运。该脚本直到昨天都运行良好。该脚本生成 XML 并将其作为文件 (5kb) 转储到远程 FTP 服务器。剧本没有改变,我们的主人也没有改变任何东西。FTP 服务器公司已经改变了一些东西(他们昨天说 IP 改变了)(但除此之外没有任何声明)。这个 IP 导致了一个不同的 ftp_server,它运行良好。
当我尝试运行脚本时,无论是否“ftp_pasv($conn_id, true);”都会出现以下错误 是否存在/禁用:
Warning: ftp_fput() [function.ftp-fput]: Opening ASCII mode data connection in ...
然后它给出了下面包含“FTP_ASCII”的行。
当我只有 ft_pasv 部分(根据原始脚本)时,仍然会出现以下附加错误,并显示以下内容:
Warning: ftp_fput() [function.ftp-fput]: data_accept: SSL/TLS handshake failed in ...
这是与上述错误相同的行。
它们最初位于自签名 SSL 上。现在,由于我的问题,他们现在使用一家知名公司发布的“正确”SSL。连接时 Filezilla 上没有显示错误。
重要的是,无论有无被动模式,我都可以毫无问题地通过 Filezilla 上传
脚本中以下代码上方的代码对于生成文件是正确的,因为它显示在脚本页面上,一旦加载。它只是不会将文件转储到服务器上。这是连接到服务器的位:
//Connect to the FTP server
$ftp_server = 'import.ftpserverdomain.com';
$ftp_user_name = 'CORRECT-USERNAME';
$ftp_user_pass = 'CORRECT-PASSWORD';
// set up basic ssl connection
$conn_id = ftp_ssl_connect($ftp_server) or die("CONNECTION ERROR");
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass) or die("LOGIN ERROR");
$directory = ftp_pwd($conn_id); // /
ftp_pasv($conn_id, true);
$fp = fopen($filename, 'w');
fputs($fp,$file_contents);
fclose($fp);
$fp = fopen($filename, 'r');
$path_with_file = $directory.$filename;
if (ftp_fput($conn_id, $path_with_file, $fp, FTP_ASCII)) {
echo "Successfully Uploaded $File\n";
} else {
echo "There was a problem while uploading $File\n";
}
fclose($fp);
unlink($filename);
ftp_close($conn_id);
任何帮助深表感谢。抱歉,如果我缺少任何信息。我很乐意提供任何东西。