php7.2 artisan 命令执行一半输出 Segmentation fault (core dumped)

我执行的命令:

php artisan xxx:xxx

不是一开始执行就报错,而是执行一部分报错,这个脚本的功能是:比如拿 1000 条数据,每次 50 条请求第三方接口,执行几次就会报这个错,网上找了没找到解决方法,有没有遇到过的,帮忙看下。

代码:

        // 接口限制每次查询 50
        $per_page = 50;
        $total_page = ceil($all_num / $per_page);
        $last_num = $all_num % $per_page;
        $fail_num = 0;
        echo '共' . $total_page . ' 页' . PHP_EOL;
        for ($i = 0; $i < $total_page; $i++){
            // 每次请求的 iccid
            if ($i === $total_page - 1){
                $per_iccids = array_slice($iccids,$i * $per_page,$last_num,true);
            }else{
                $per_iccids = array_slice($iccids,$i * $per_page,$per_page,true);
            }
            $per_iccids = array_values($per_iccids);
            echo date('Y-m-d H:i:s') . '当前页:' . $i . PHP_EOL;
            $res = UsageService::aliFlow($per_iccids);
            if ($res['status'] != '0000' || !isset($res['data']['terminals'])){
                var_dump($res);
                echo date('Y-m-d H:i:s') . '查询失败!' . PHP_EOL;
                exit;
            }
            $terminals = $res['data']['terminals'];
            foreach ($terminals as $v){
                // iccid  monthToDateUsage imsi imei simStatus=2 已激活  realNameStatus
                $columns = ['a.card_merchant','b.card_status','b.usage','b.expiration_time','b.activation_time','b.month_flow',
                    'b.category_type','b.id','b.add_time'];
                $card_info = DB::table('usage_card_info as b')
                    ->leftJoin('usage_iccid_list as a','a.iccid','=','b.iccid')
                    ->where(['a.iccid'=>$v['iccid']])
                    ->where('b.expiration_time','>',$datetime)
                    ->orderBy('b.id','desc')
                    ->first($columns);
                $card_status = $card_info->card_status;
                // 数据库: 1.已实名 2.未实名 3.待审核 4.实名未认证通过 0无需实名
                // API : 0-不需实名未实名,1-需要实名未实名,2-需要实名已实名,3-不需要实名已实名
                switch ($v['realNameStatus']){
                    case 0:
                        $is_certification = 0;
                        break;
                    case 2:
                    case 3:
                        $is_certification = 1;
                        break;
                    default:
                        $is_certification = 2;
                }
                // 转换单位 MB -> KB
                $flow_used = $v['monthToDateUsage'] * 1024;
                // 入库
                DB::beginTransaction();
                try {
                    // 流量未使用完 解除异常状态
                    if ($card_info->card_status != 1 && $flow_used < $card_info->usage && $card_info->expiration_time > $datetime){
                        UsageCardInfo::query()->where(['id'=>$card_info->id])->update(['card_status'=>1]);
                        $card_status = 1;
                    }
                    if ($card_info->activation_time == '0000-00-00 00:00:00'){
                        $card_info->activation_time = $datetime;
                    }

                    if (!$flow_left = UsageMonthFlowLeft::query()->where(['iccid'=>$v['iccid']])->first()){
                        $flow_left = new UsageMonthFlowLeft();
                        $flow_left->iccid = $v['iccid'];
                        $flow_left->flow_used = $flow_used; // 已使用流量
                        $flow_left->usage = $card_info->usage;
                        $flow_left->card_status = $card_status;
                        $flow_left->expiration_time = $card_info->expiration_time;
                        $flow_left->sur_package_time = floor((strtotime($card_info->expiration_time) - time()) / 86400);
                        $flow_left->month_used_total = $flow_used;
                        $flow_left->month_flow = $card_info->month_flow;
                        $flow_left->bind_imei = $v['imei'];
                        $flow_left->imsi = $v['imsi'];
                        $flow_left->status = $v['simStatus'];
                        $flow_left->super_package_usable = 0;
                        $flow_left->super_package_usage = 0;
                        $flow_left->month_available_flow_total = $card_info->month_flow;
                        $flow_left->surplus_flow = 0;
                        $flow_left->category_type = $card_info->category_type;
                        $flow_left->card_merchant = $card_info->card_merchant;
                        $flow_left->year_activate_time = $card_info->activation_time;
                        $flow_left->year_expiration_time = $card_info->expiration_time;
                        $flow_left->gz_package_type = 0;
                        $flow_left->is_certification = $is_certification;
                        $flow_left->warm = '*温馨提示:叠加包套餐或赠送套餐,每月26号过期;购买固定套餐时,当前月赠送2GB,下月生效固定套餐.';
                        $flow_left->save();
                    }else{
                        $flow_left->sur_package_time = floor((strtotime($card_info->expiration_time) - time()) / 86400);
                        $flow_left->flow_used = $flow_used;
                        $flow_left->is_certification = $is_certification;
                        $flow_left->save();
                    }
                    // 缓存流量使用数据
                    UsageService::CacheFlowInfo($flow_left);
                    DB::commit();
                }catch (\Exception $e){
                    $msg = $e->getMessage();
                    DB::rollBack();
                }
                if (isset($msg)){
                    $fail_num ++;
                    echo date('Y-m-d H:i:s') . ': ' . $v['iccid'] . '处理失败 ' . $msg . PHP_EOL;
                }
            }
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

找到问题了,是 PHP sm3 扩展有问题,换了之后一切正常。

2年前
讨论数量: 3

php设置的内存应该 溢出了

2年前

舍不得发代码

2年前 评论
qingye (楼主) 2年前

找到问题了,是 PHP sm3 扩展有问题,换了之后一切正常。

2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!