V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lysS
V2EX  ›  问与答

PHP 如何处理致命错误???

  •  
  •   lysS · 2019-12-07 11:43:55 +08:00 · 1813 次点击
    这是一个创建于 1573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根本需求:需要对函数设定执行时间,如果这个函数超时,就执行另一个函数;于是我就用了 set_time_limit()

    function getInfo($url){
        set_time_limit(20);
        //
        $params = "$url";
        $path='python D:\Desktop\test.py ';
        passthru($path.$params,$return_var);
    }
    

    但是这玩意超时报个致命错误 Fatal error,查了一下. ,致命错误好像不怎么好捕捉和处理

    所以各位大佬有什么异常处理这种错误的方法,或者换一种实现设定函数执行时间的方法吗??

    第 1 条附言  ·  2019-12-07 14:31:39 +08:00
    曲线救国,我在 pyhton 里加了 timeout
    11 条回复    2019-12-07 15:00:15 +08:00
    jenschen
        1
    jenschen  
       2019-12-07 12:04:31 +08:00 via iPhone
    php 的异常补货😂,参考一下 set_error_handler。赶紧转型 java 吧
    jenschen
        2
    jenschen  
       2019-12-07 12:09:48 +08:00 via iPhone
    @jenschen 不行,你再去试试这个 set_exception_handler... 唉
    des
        3
    des  
       2019-12-07 12:43:25 +08:00 via Android
    set_time_limit ?
    看看能不能用其他方法吧
    你这是在请求 url ?为啥不用 curl 库?
    wangkun025
        4
    wangkun025  
       2019-12-07 12:44:46 +08:00
    死给他们看
    chinvo
        5
    chinvo  
       2019-12-07 12:55:00 +08:00 via iPhone
    set_time_limit 是限制当前进程的执行时间,当然会 fatal error
    jenschen
        6
    jenschen  
       2019-12-07 13:35:36 +08:00 via iPhone
    真心不喜欢 php 的错误处理,乱七八糟

    认真测试了一下。利用 register_shutdown_function。可以参考官方文档下的第一条评论。16 年前...

    <?php

    function err_handler(){
    echo "err_handler";
    }

    function exception_handler(){
    echo "exception_handler";
    }

    function shutdown_handler(){
    echo "register_shutdown_function\n";

    print_r(error_get_last());
    }


    set_error_handler("err_handler");
    set_error_handler("exception_handler");
    register_shutdown_function("shutdown_handler");

    $res = set_time_limit(5);
    try{
    while(true){

    }
    }catch(Exception $e){

    }

    ?>
    lysS
        7
    lysS  
    OP
       2019-12-07 13:56:04 +08:00 via Android
    @des 爬东西。。
    lysS
        8
    lysS  
    OP
       2019-12-07 13:56:55 +08:00 via Android
    @jenschen 谢谢啊,喔仔细看一下
    lysS
        9
    lysS  
    OP
       2019-12-07 14:24:11 +08:00
    @jenschen ''PHP 异常处理中 可以通过 set_error_handler 来捕获. 但是却只能捕获 NOTICE/WARNING 级别的错误, 对于 E_ERROR 是无能为力的.''
    CODEWEA
        10
    CODEWEA  
       2019-12-07 14:53:46 +08:00
    php7 Throwable
    CODEWEA
        11
    CODEWEA  
       2019-12-07 15:00:15 +08:00
    你应该去捕获错误,而不是异常
    ```php

    try {
    eee();
    } catch (Error $errorException) {
    echo 'error:'.$errorException->getMessage();
    }
    //error:Call to undefined function eee()
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1129 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 18:46 · PVG 02:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.