从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的目录,经测试一个确实是可以的
?
|