我在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]。
在那之后,佩克尔又工作了。