swoole协程在laravel中无法输出报错信息

发布于 2022-09-11 18:16:45 字数 2030 浏览 9 评论 0

如题,开发环境

ubuntu 16.0.4 lts
php 7.1.7
swoole 4.2.13
laravel 5.6.29

php.ini与laravel的诊断开关均已打开,
直接在cli中php a.php运行没有问题,但是在laravel中php artisan scanner,程序会直接退出且不产生任何报错,没有生成日志也没有打印消息,就没了……

示例:

<?php namespace App\Console\Commands;
use Illuminate\Console\Command;
use Swlib\SaberGM;

class ScanCli extends Command {
    protected $signature = 'scanner';
    protected $description = '扫描';
    public function __construct() {
        parent::__construct();
    }
    public function handle() {
        try {
            go(function () {
                echo "1\n";
                $str = json_decode('{"a":123}');
                try {
                    echo "2\n";
                    echo $str['a'] . "\n";//Cannot use object of type stdClass as array
                    echo "3\n";
                } catch (\Exception $exception) {
                    echo $exception->getTraceAsString() . "\n";
                }
                echo "4\n";
                return;
            });
        } catch (\Exception $exception) {
            echo $exception->getTraceAsString() . "\n";
        }
        return true;
    }
}

vendor里也做过没什么额外的调整,就几个东西

    "require": {
        "php": "^7.1.3",
        "elasticsearch/elasticsearch": "^6.1",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0",
        "predis/predis": "^1.1",
        "swlib/saber": "^1.0"
    },
    "require-dev": {
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0"
    },

不使用协程直接扔exception是可以报错的,不使用laravel也是可以正常报错的,但是这俩合一起……出了错就闷声发财去了……

如上面代码的示例……命令行只会输出到2,之后就退出了,没有任何剩余步骤,感觉就像出错直接exit了……实在是不理解到底发生了什么……
看起来可能是laravel干掉了报错信息,之后又因为某些问题导致laravel输出报错的部分出现了bug……
又或者是因为协程的存在导致了laravel的ExceptionHandler不再可用,而且也没有恢复正常的报错格式……

想问一下有没有哪位遇到过同样的问题?实在不行只能弃掉laravel单独用了……

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

懵少女 2022-09-18 18:16:45

你try catch代码呢?可能是你没捕获到

laravel的ExceptionHandler好像是个页面。。好久没用了

试一下使用swoole的退出协程捕获https://wiki.swoole.com/wiki/...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文