【问题标题】:PHP Script Won't Upload to FTP Server -PHP 脚本不会上传到 FTP 服务器 -
【发布时间】:2013-12-18 03:56:20
【问题描述】:

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

非常感谢任何帮助。抱歉,如果我缺少任何信息。我很乐意提供。

【问题讨论】:

  • 如果 FTP 服务更改了设置,他们是否没有为您提供有关它的新信息?任何在没有额外支持的情况下进行更改的人实际上都应该这样做。您是否尝试过使用不同的设置?尝试使用与 FileZilla 相同的 FTP 登录。
  • 感谢您的回复。他们说这只是发生了 IP 更改,包括域切换。此开关在 Filezilla 现在运行时起作用。因此,他们声称不需要向我们提供其他任何东西。我有点需要一些代码帮助,因为我的开发人员已经抛弃了我!除了被动模式、ftp_server、ftp_user_name、ftp_user_pass 和 ftp_ssl_connect,我还能尝试复制我正在使用的 Filezilla 设置吗?谢谢。
  • 不客气。您是否尝试过ftp_connect 而不是ftp_ssl_connect?可能 SSL 套接字无法再访问了。
  • 再次感谢您的意见。我试过这个,它说,“警告:ftp_login() [function.ftp-login]:策略需要 SSL”,这在没有 SSL 的 Filefilla 中也是如此。你还有其他建议吗?谢谢。
  • 不客气(再次) ;-) 抱歉,我不知道还能告诉你什么。对我来说,我“不再使用”的(当时)托管公司曾经多次改变事情而没有增加重要的技术支持。我确信它与您的 FTP 服务/托管公司有关,然后它很可能是一个“传播”​​问题,它可以在 24 小时内开始工作。虽然很难说。我希望我能提供更多帮助。

标签: php ftp


【解决方案1】:

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

【讨论】:

  • 欢迎来到 SO!您能否添加一些代码来显示如何指向 ca-certs 目录?
【解决方案2】:

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

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

【讨论】: