首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
curl函数setopt CURLOPT_HTTPHEADER出现 core dump
### 问题描述 使用Co\run创建协程,使用了原生curl函数,hook_flags设置为SWOOLE_HOOK_ALL,curl_setopt函数设置CURLOPT_HTTPHEADER的值的时候会出现core_dump。 如果将SWOOLE_HOOK_NATIVE_CURL去掉则不出现错误。 ### Swoole版本,PHP版本,以及操作系统版本信息 ``` ## swoole版本 安装方式 pecl Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.6.1 Built => Jan 12 2021 12:51:13 coroutine => enabled with boost asm context epoll => enabled eventfd => enabled signalfd => enabled cpu_affinity => enabled spinlock => enabled rwlock => enabled sockets => enabled openssl => OpenSSL 1.0.2k-fips 26 Jan 2017 http2 => enabled json => enabled curl-native => enabled pcre => enabled zlib => 1.2.7 mutex_timedlock => enabled pthread_barrier => enabled futex => enabled mysqlnd => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => On => On swoole.unixsock_buffer_size => 8388608 => 8388608 ## PHP版本 没开启opcache PHP 8.0.1 (cli) (built: Jan 12 2021 11:15:36) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.1, Copyright (c) Zend Technologies ## 服务器版本 Linux version 3.10.0-327.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015 ``` ### 相关代码 ```php ##简单代码 Co\run(function () { go(function (){ $curl = curl_init(); ...... //省略 ...... curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_URL, $url); }); }); ##问题定位 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); ##如此设置会core dump Co::set(['hook_flags' => SWOOLE_HOOK_ALL]); ##如此设置可以正常运行 Co::set(['hook_flags' => SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_NATIVE_CURL]); ##如何设置也可以运行 Co::set(['hook_flags' => SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_NATIVE_CURL| SWOOLE_HOOK_CURL ]); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 文档中提出: ``` 使用前需要在编译时开启 --enable-swoole-curl 选项; 开启该选项后将自动设置 SWOOLE_HOOK_NATIVE_CURL,关闭 SWOOLE_HOOK_CURL; 同时 SWOOLE_HOOK_ALL 包含 SWOOLE_HOOK_NATIVE_CURL ``` 1、请问SWOOLE_HOOK_NATIVE_CURL是SWOOLE_HOOK_CURL的替代版本吗? 另外我在另外一台服务器中,php7.3中安装同样版本swoole4.6.1,无论如何设置都不会出现core dump 2、请问我出现的这个问题应该如何解决?错误的原因是什么呢?
发布于5年前 · 3 次浏览 · 来自
提问
bibi
### 问题描述 使用Co\run创建协程,使用了原生curl函数,hook_flags设置为SWOOLE_HOOK_ALL,curl_setopt函数设置CURLOPT_HTTPHEADER的值的时候会出现core_dump。 如果将SWOOLE_HOOK_NATIVE_CURL去掉则不出现错误。 ### Swoole版本,PHP版本,以及操作系统版本信息 ``` ## swoole版本 安装方式 pecl Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.6.1 Built => Jan 12 2021 12:51:13 coroutine => enabled with boost asm context epoll => enabled eventfd => enabled signalfd => enabled cpu_affinity => enabled spinlock => enabled rwlock => enabled sockets => enabled openssl => OpenSSL 1.0.2k-fips 26 Jan 2017 http2 => enabled json => enabled curl-native => enabled pcre => enabled zlib => 1.2.7 mutex_timedlock => enabled pthread_barrier => enabled futex => enabled mysqlnd => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => On => On swoole.unixsock_buffer_size => 8388608 => 8388608 ## PHP版本 没开启opcache PHP 8.0.1 (cli) (built: Jan 12 2021 11:15:36) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.1, Copyright (c) Zend Technologies ## 服务器版本 Linux version 3.10.0-327.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015 ``` ### 相关代码 ```php ##简单代码 Co\run(function () { go(function (){ $curl = curl_init(); ...... //省略 ...... curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_URL, $url); }); }); ##问题定位 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); ##如此设置会core dump Co::set(['hook_flags' => SWOOLE_HOOK_ALL]); ##如此设置可以正常运行 Co::set(['hook_flags' => SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_NATIVE_CURL]); ##如何设置也可以运行 Co::set(['hook_flags' => SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_NATIVE_CURL| SWOOLE_HOOK_CURL ]); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 文档中提出: ``` 使用前需要在编译时开启 --enable-swoole-curl 选项; 开启该选项后将自动设置 SWOOLE_HOOK_NATIVE_CURL,关闭 SWOOLE_HOOK_CURL; 同时 SWOOLE_HOOK_ALL 包含 SWOOLE_HOOK_NATIVE_CURL ``` 1、请问SWOOLE_HOOK_NATIVE_CURL是SWOOLE_HOOK_CURL的替代版本吗? 另外我在另外一台服务器中,php7.3中安装同样版本swoole4.6.1,无论如何设置都不会出现core dump 2、请问我出现的这个问题应该如何解决?错误的原因是什么呢?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2021-01-14
鲁飞
你设置了什么header,完整代码发下。 出现coredump请使用gdb等工具进行追踪,并向swoole-src提出issue。 https://wiki.swoole.com/#/other/issue
赞
0
回复
2021-01-14
bibi
回复
鲁飞
好的。 header是一个数组,无论是空数据或者其它都是一样的结果: ``` ①$headers = array(); ②$headers[] = 'Expect: '; ```
赞
0
回复
2021-01-14
鲁飞
回复
bibi
可以先用PHP7+,PHP8刚出来不久,底层还有很多兼容性问题
赞
0
回复