PHP OpenSSL 未定义常数 OPENSSL_ALGO_DSS1

PHP OpenSSL undefined constant OPENSSL_ALGO_DSS1

我是 运行 PHP 5.2.13 Windows Server 2008 R2 机器(Windows 7 等效)。

我写这篇文章主要是因为我在搜索警告时收到 google dead end,我正在尝试为其添加一些内容。

我收到以下通知/警告:

Use of undefined constant OPENSSL_ALGO_DSS1 - assumed 'OPENSSL_ALGO_DSS1'

openssl_verify() expects parameter 4 to be long, string given

当运行这行代码:

return openssl_verify($data, $signature, $this->getPublicKey(), OPENSSL_ALGO_DSS1);

显然第二个警告是由第一个引起的。

但是问题不在于未加载 OpenSSL 库,因为我从 phpinfo 得到以下输出:

OpenSSL support     enabled
OpenSSL Version     OpenSSL 0.9.8k 25 Mar 2009 

这在所有其他机器上运行,它已经过测试,所以有一些特定于机器的东西。

我发现的唯一区别是来自 phpinfo 的以下内容:

Registered Stream Socket Transports     tcp, udp

与它正在工作的机器上的对比:

Registered Stream Socket Transports     tcp, udp, ssl, sslv3, sslv2, tls

但我不确定这是否是一条红鲱鱼。

我的解决方案是完全卸载 PHP 和 运行 php-5.2.13-nts-x86.msi 安装程序并通过那里安装 OpenSSL 库。

我已经完成了 OpenSSL 库的手动安装,而不是使用 Windows 安装程序。

我现在 phpinfo 中有以下内容:

Registered PHP Streams  php, file, data, http, ftp, compress.zlib, https, ftps
Registered Stream Socket Transports     tcp, udp, ssl, sslv3, sslv2, tls 

据我所知,甚至根据 openssl installation documentation there shouldn't be a requirement to have to install using the installer. On other machines I haven't had this problem. Altering the 'Registered Stream Socket Transports' to include ssl should only require installing the open_ssl library and adding a line to the php.ini file e.g. this answer