从swoole的v4.6.0开始支持可以使用
原生 curl 协程客户端 (SWOOLE_HOOK_NATIVE_CURL)
在这个版本中最大的变化莫过于支持了原生 curl
协程客户端,有什么用呢?
用过 SWOOLE_HOOK_CURL
的小伙伴应该知道,有一些不支持的选项,同时还会因为部分 SDK 的不兼容导致一些错误,例如:
PHP Notice: Object of class Swoole\Curl\Handler could not be converted to int
PHP Warning: curl_multi_add_handle() expects parameter 2 to be resource, object given
Bash
原因是 hook 后的 curl
不再是一个 resource
类型,而是 object
类型。
出现这种问题也建议联系 SDK 方修改代码,因为在
PHP8
中curl
不再是resource
类型,而是object
类型
以及经常使用的阿里云 OSS SDK 也是不支持SWOOLE_HOOK_CURL
的,会遇到一些奇奇怪怪的
那么从 v4.6.0
版本开始就可以使用 SWOOLE_HOOK_NATIVE_CURL
代替 SWOOLE_HOOK_CURL
,来解决以上提到的问题
使用SWOOLE_HOOK_NATIVE_CURL
需要在编译 Swoole 扩展时增加 —enable-swoole-curl 编译参数,开启该选项后将自动设置 SWOOLE_HOOK_NATIVE_CURL
,关闭 SWOOLE_HOOK_CURL
,同时 SWOOLE_HOOK_ALL
也会包含 SWOOLE_HOOK_NATIVE_CURL
pecl 的 v4.6.0 版本暂时没有增加这个选项,请使用手动编译开启,下个版本中会增加。
编译成功后使用--ri
查看信息,就可以看到curl-native
$ php --ri swoole | grep curl
curl-native => enabled
swoole安装支持openssl
php --ri swoole 查看当前扩展
安装过程:
运行命令 pecl upgrade swoole
看到openssl的时候选择yes --with-openssl-dir=/usr/bin/openssl
当运行完毕后如提示找不到openssl.h头文件,使用which openssl
查看openssl的地址和上面写的也是相同的,重复试了很多次都没有效果
原因:有的电脑的openssl安装位置是在/usr/local/opt
下,然后我在这个目录下发现了两个有关openssl的目录,经测试一个确实是可以的