pear通道更新pear.php.net后出现SSL问题


SSL issue after pear channel-update pear.php.net

我在Windows7上有XAMPP。在用更新pear.php.net频道后

pear channel-update pear.php.net

并尝试安装新程序包,例如pecl install zmq,遇到以下消息,无法安装任何程序包:

Connection to 'ssl://pecl.php.net:443' failed: Unable to find the socket 
transport "ssl" - did you forget to enable it when you configured PHP?

我在网上搜索了很多,试图解决它,但无法解决。有人能帮我解决吗?原因是什么?

最近我在使用XAMPP 7.0 的macOS Sierra时遇到了这个问题

我用更新了pecl通道

sudo pecl channel-update pecl.php.net

然后我得到

连接到`ssl://pecl.php.net:443'失败:

我的解决方案如下

运行php -r "print_r(openssl_get_cert_locations());"

检查default_cert_file路径

然后从下载证书http://curl.haxx.se/ca/cacert.pem将其重命名并放置在default_cert_file路径

那就试试pecl列出所有

它应该工作良好

在我的mac中,基于chintan回复,我做到了:

/Applications/XAMPP/bin/php -r "print_r(openssl_get_cert_locations());"

显示default_cert_file

Array
(
    [default_cert_file] => /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /Applications/XAMPP/xamppfiles/share/openssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /Applications/XAMPP/xamppfiles/share/openssl/private
    [default_default_cert_area] => /Applications/XAMPP/xamppfiles/share/openssl
    [ini_cafile] => /Applications/XAMPP/xamppfiles/share/curl/curl-ca-bundle.crt
    [ini_capath] => 
)

然后获取最后一个版本的cacert.pem:

wget http://curl.haxx.se/ca/cacert.pem

然后我把它移到default_cert_file:的正确位置

sudo mv cacert.pem /Applications/XAMPP/xamppfiles/share/openssl/cert.pem

在Windows.bat上的XAMPP 7.1中,PECL和PEAR的文件可能是SSL无法工作的原因。如果就地命令php peclcmd.php list-all对您有效,那么这可能是因为您使用了正确的php.ini文件。只需在.bat-file命令中添加选项-c "%PHP_PEAR_BIN_DIR%'php.ini"(您的php.ini可能在另一个路径中(。它保持在:RUN部分。

这是PEAR 1.9.x与PHP 5.5+.结合使用时出现的错误

请升级到修复此问题的PEAR 1.10.0dev1(或最新的1.10.0dev2(。

对于我在Windows 10上的%PHP_PEAR_BIN_DIR%'pecl.bat,从"%PHP_PEAR_PHP_BIN%" -C -n -d开始的行;去除"-n〃;为我工作。

在我的2021 m1 MacbookPro和OSX 12.4上,以上任何一项都不适用。然而,当我执行php-r"print_r(openssl_get_cert_locations(((&";,我还有两条额外的路径:

[ini_cafile] => /usr/local/etc/openssl@1.1/cert.pem
[ini_capath] => /usr/local/etc/openssl@1.1/certs

我必须(sudo(创建ini_cafile目录,然后在http://curl.haxx.se/ca/cacert.pem文件将其重命名为cert.pem。然后我更新了目录和内容的权限。

在我的OSX安装中,似乎使用了[in_cafile],而不是[default_cert_file]。

在那之后,佩克尔又工作了。