【问题标题】:Hide Stack trace in PHP 7.1 (Xdebug NOT installed)在 PHP 7.1 中隐藏堆栈跟踪(未安装 Xdebug)
【发布时间】:2018-04-14 19:30:34
【问题描述】:

我在使用 PHP 7.1 和 Apache 2.4 的新服务器上工作,我得到了 堆栈跟踪,这使得查看错误所在的文件变得更加困难。

当我搜索这个问题时,我只找到关于 xdebug 的 cmets,并且它创建了这个问题,但是这个服务器没有安装或启用 xdebug,除非它内置在 PHP 7 中,隐藏在某个地方。

Fatal error:  Uncaught ArgumentCountError: Too few arguments to function Test::testing(), 
0 passed in /var/www/vhosts/test.com/httpdocs/test.php on line 15 and exactly 1 
expected in /var/www/vhosts/test.com/httpdocs/test.php:7
Stack trace:
#0 /var/www/vhosts/test.com/httpdocs/test.php(15): Test::testing()
#1 {main}
  thrown in /var/www/vhosts/test.com/httpdocs/test.php on line 7

有时我很感激它们,但我想正常禁用它们,并在需要时启用它。我期望的是一个简单的 PHP 错误消息:

Parse error: syntax error, unexpected end of file in
/var/www/vhosts/test.com/httpdocs/test.php on line 51

类的示例代码:

class Test
{
   public static function testing($var)
   {
      echo "tet";
   }
}

Test::testing();

没有类也会发生同样的事情:

function testing($var) {
   echo "tet";
}

testing();

有没有办法禁用堆栈跟踪?

【问题讨论】:

    标签: php error-handling stack-trace


    【解决方案1】:

    这里的关键是Uncaught部分:

    Fatal error:  Uncaught ArgumentCountError
    

    如果你抓住它,你可以展示任何你想要的东西。因此,您可以将所有代码包装在:

    try {
        // your code
    } catch (Throwable $e) {
        echo $e->getMessage() . " in\n";
        echo $e->getFile() . ' on line ' . $e->getLine() . "\n";
        // echo $e->getTraceAsString();
    }
    

    【讨论】:

    • 但这是 PHP 7.1 中的新功能吗?这对于我正在使用的应用程序上的所有代码都是通用的,并且其中放置 try/catch 语句的代码很多,除非我将 try 放在索引的底部并在最后捕获。没有办法只禁用堆栈跟踪吗?
    • @Niclas 我会将index.php 包装在try - catch 中,这比设置自定义错误处理程序要容易得多。但我从未尝试过减少堆栈跟踪,我要么全部想要(开发),要么完全不同(实时)。
    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多