laravel10+php8.2- 使用队列时 c出现一个错误:The process has been signaled with signal "11".
1. 运行环境
nginx
1). 当前使用的 Laravel 版本?
laravel 10
2). 当前使用的 php/php-fpm 版本?
PHP 版本: php 8.2
php-fpm 版本:php 8.2
3). 当前系统
CentOS 8
4). 业务环境
开发环境
2. 问题描述?
在队列中调用在其他类中封装的curl请求时,会出现:Symfony\Component\Process\Exception\ProcessSignaledException
The process has been signaled with signal “11”.错误,
但是如果直接在队列中直接使用
$ch = curl_init();这样直接请求时,则一切正常。
查阅相关资料提到是访问了不正确的内存地址导致的,目前还未解决,还请各位大神帮忙解答一下,十分感谢!
下面是剪切的部分代码:注-以下代码中的$common是自行封装的类文件,其中write_Log_info是记录日志(已同时支持字符串和数据以及对象的记录),curl_post_ssl是发起curl请求,已经全部测试过没有问题;
以下代码根据日志记录分析如下:
开始下单—正常记录,代码已执行 开始下单—正常记录,代码已执行
下单返回—没有记录,代码未执行 下单返回—没有记录,代码未执行
结论:代码执行到curl_post_ssl后直接终止了 结论:代码执行到curl_post_ssl后直接终止了
随后再curl_post_ssl中记录了日志,发现接口已经正常返回了数据,但是后续代码没有被执行,查看队列日志发现:The process has been signaled with signal “11”.错误
$url = ‘test.api.cn/api/v1/addOrder';
$channel_data = [
‘order_no’=>$order->order_no,
‘quantity’=>$number,
‘goods_code’=>$stock->goods_code,
‘channel_type_id’=>$channel_type_info->id,
‘channel_id’=>$channel_info->id,
‘notify_url’=>’’,
‘order_data’=>json_encode($order_data)
];
$common->write_Log_info(‘开始下单’,’Goods’,’Stock’);
$result = $common->curl_post_ssl($url,$channel_data);
$common->write_Log_info([‘下单返回’,$result],’Goods’,’Stock’);
if(empty($result)){
throw new \Exception(‘接口请求出现错误,返回值为空!’);
}
下面是封装的curl_post_ssl请求方法
/**
- post请求
- @param $url string
- @param $param array|string
- @param $second int
- @return array|string|bool
- /public function curl_post_ssl($url, $param, $second = 30){
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch, CURLOPT_URL, $url);
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
//忽略证书验证 (有些网站SSL证书错误)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//运行curl
$data = curl_exec($ch);
//获取状态码赋值
$httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
//返回结果
if($httpcode == 200){
$return = $data;
}else{
$return = false;
}
$this->write_Log_info([
‘code’=>$httpcode, ‘return’=>$return,’data’=>$data
],’AAA’,’AAA’);
return $return;
}
推荐文章: