我正在尝试使用 PHP 将文件上传到远程 FTP 服务器(需要 FTPES)。我编写的脚本在本地工作,但在实时服务器上 ftp_login() 返回 false 并且错误日志中出现以下警告:
PHP Warning: ftp_login(): failed to create the SSL context [...]
PHP Warning: ftp_login(): AUTH command ok; starting SSL connection. [...]
我知道登录详细信息是正确的(因为相同的代码在本地工作)。我可以在命令行上使用 curl 从实时服务器成功连接到 FTP 服务器。
该服务器正在运行 PHP 5.3.3(CentOS 上的 Zend Server)。我可以从 phpinfo 看到 PHP 配置命令包括 -with-openssl=/usr/local/openssl-0.9.8o
代码很简单:
$ftpConnection = ftp_ssl_connect('hostname');
if (!$ftpConnection) {
echo "Failed to connect to FTP Site\n";
return false;
}
if (!ftp_login($ftpConnection, 'xxxxx', 'xxxxx')) {
echo "Failed to login to FTP site\n";
return false;
}
作为参考,我的本地盒子(它工作正常)正在运行 PHP 5.3.3-1ubuntu9.3。
谁能指出我正确的方向?
编辑:我注意到此服务器的 SSL 证书实际上无效,因为我要连接的主机名与证书上的公用名不匹配。是否有 PHP 设置控制它或 openSSL 对证书错误的严格程度?这可能是唯一的问题。