0

在这上面花了几个小时,我不走运。该脚本直到昨天都运行良好。该脚本生成 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);

任何帮助深表感谢。抱歉,如果我缺少任何信息。我很乐意提供任何东西。

4

2 回答 2

1

在我看来,PHP 找不到您的 CA 证书,如果您在 linux 机器上运行它,这是我以前遇到过的。一些搜索应该会有所帮助,但基本上 PHP 的 OpenSSL 集成需要指向您的 cacerts 目录,以便它可以使用这些来验证它试图建立的 SSL 连接。

于 2013-09-26T09:21:02.533 回答
0

我解决了这个问题。希望这可以帮助某人。问题原来是服务器(HostGator)。他们不允许在共享帐户上通过 TLS 进行 FTP。

尽管这工作了一年,但切换主机解决了这个问题。

于 2013-12-17T19:56:20.290 回答