Ubuntu18.04下sury.org源php5.6-http扩展无法实例化http\Client
问题原因
你遇到的报错Failed to locate "(null)" client request handler是PHP的pecl_http扩展(即你安装的php5.6-http包)未找到可用的底层请求处理客户端导致的:
对应PHP5.6的pecl_http 2.x版本默认依赖标准的libcurl3作为请求处理器,而Ubuntu 18.04默认预装的是libcurl4,你当前系统中仅安装了libcurl3-gnutls和libcurl4,gnutls分支的libcurl不被pecl_http默认识别,因此实例化http\Client时找不到可用的handler抛出异常。
解决方法
方案一:替换libcurl版本(兼容pecl_http原生功能)
- 先卸载冲突的libcurl4及相关PHP扩展:
注意:卸载libcurl4前请确认当前系统中没有强制依赖libcurl4的业务软件,避免影响其他服务运行。sudo apt remove libcurl4 php5.6-http php5.6-curl - 安装兼容的libcurl3及对应PHP扩展:
sudo apt install libcurl3 php5.6-curl php5.6-http - 验证curl handler是否被正常识别:
输出结果中包含php -r "var_dump(http\Client::availableHandlers());"curl即表示配置生效,此时再运行你的测试代码即可正常实例化http\Client。
方案二:更换HTTP客户端(不改动系统curl版本)
如果无法卸载libcurl4,可以放弃使用pecl_http提供的http\Client,改用PHP原生curl扩展,或者直接使用用户态HTTP客户端库实现请求功能,不需要调整系统依赖。
内容的提问来源于stack exchange,提问作者Tibor Nagy
相关产品推荐
相关产品推荐

