OpenSSL已启用,但无法正常工作

我正在运行Apache 2.2.13和PHP 5.2.12。 只需手动安装PHP 5.2.12(即可访问所有扩展)并启用OpenSSL。 phpinfo()表示OpenSSL已启用并运行OpenSSL 0.9.8k 2009年3月25日。

我得到这个错误:PHP致命错误:调用未定义的函数ftp_ssl_connect()。

我已经看到了PHP手册的build议“ftp_ssl_connect()只有在ftp模块和OpenSSL支持静态构build到php中时才可用”,并进一步声明“必须编译自己的PHP二进制文件”以使其可以在Windows 。

我怀疑phpinfo()只是表示OpenSSL被“启用”,因为我已经取消了注释行'extension = php_openssl.dll',并在正确的文件夹中有正确的dll,环境variables中有正确的path。 也许无论phpinfo()是什么,都必须完成一个到PHP的静态构build。

我相信分配的目标(如上所述)是用于dynamic扩展,但重新编译(对于OpenSSL)是对静态扩展进行编码。

ftp扩展工作正常(内置于PHP 5.2)。 我用下面的代码testing这个:

$ conn_id = ftp_connect($ url); $ login_result = ftp_login($ conn_id,$ username,$ password); ftp_close($ conn_id);

请注意,要检查ssl,我只能将ftp_connect更改为ftp_ssl_connect。 到达这一行时,我在Apache错误日志文件中得到了上面的PHP错误。

如文档所述 (引用您已经引用的内容)

注意:为什么这个功能可能不存在
ftp_ssl_connect()只有在ftp模块和OpenSSL支持都是静态构建到php中时才可用,这意味着在Windows上,这个函数在官方的PHP版本中是未定义的。
为了使这个函数在Windows上可用,你必须编译你自己的PHP二进制文件。

你说你安装PHP“手动”; 但这可能仍然意味着你使用了php.net的“官方”版本 – 这意味着你还没有编译自己的PHP二进制文件…所以,这个功能是不可用的。

没有什么魔力:如果你想能够使用这个函数,似乎你将不得不重新编译PHP,在编译时使用正确的配置选项。

下面是关于这个的一些文档: 在Windows上构建你自己的PHP – 但是…祝你好运…我从来没有听说过在Windows上编译PHP是“简单的”,事实上(Linux上并不那么难,但是Linux在编译时可能更适合)

其他一些解决方案:

  • 切换到Linux为您的开发(即使它只是使用虚拟机) – 但你可能仍然必须重新编译PHP来获得(可能不会默认启用)
  • 只是不使用该功能; 毕竟,你知道你的托管服务是否会为你提供吗? (如果您不能在生产服务器上使用它,则不需要在开发/测试机器上使用)