如何显示php错误?

zqry0prt  于 2021-08-09  发布在  Java
关注(0)|答案(28)|浏览(506)

我已经检查了我的php ini文件( php.ini )以及 display_errors 已设置,并且错误报告也已设置 E_ALL . 我已经重新启动了apache Web服务器。
我甚至把这些行放在我的脚本的顶部,它甚至不捕捉简单的解析错误。例如,我用 "$" 我不会结束陈述 ";" . 但是我所有的脚本都会在这些错误上显示一个空白页,但是我想在浏览器输出中看到错误。

error_reporting(E_ALL);
ini_set('display_errors', 1);

还有什么事要做?

ni65a41a

ni65a41a16#

如果你发现自己处于一种无法通过 php.ini 或者 .htaccess 当php脚本包含解析错误时,显示错误就太不走运了。然后,您必须在命令行上解析为linting文件,如下所示:

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

如果您的主机被锁定,不允许通过 php.ini 或者 .htaccess ,也可能不允许通过 ini_set . 您可以使用以下php脚本进行检查:

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}
vi4fp9gy

vi4fp9gy17#

在我的普通php项目中,我通常使用以下代码。

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT', 'DEVELOPMENT');
}

$base_url = null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url = 'http://localhost/product/';
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url = 'Production URL'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}
cl25kdpy

cl25kdpy18#

如果尽管遵循了以上所有的答案(或者您无法编辑php.ini文件),但仍然无法获得错误消息,请尝试创建一个新的php文件来启用错误报告,然后包含问题文件。如:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

尽管我把一切都安排妥当了 php.ini 文件,这是我唯一能发现名称空间错误的方法。我的确切设想是:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}
jxct1oxe

jxct1oxe19#

由于我们现在运行的是PHP7,这里给出的答案不再正确。唯一还行的是frankforte在谈到php时提到的那个 7.
另一方面,与使用try/catch来捕捉错误不同,您可以使用一个技巧:使用include。
下面是三段代码:
文件:tst1.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    // Missing " and ;
    echo "Testing
?>

在php中运行这个 7什么也看不出来。
现在,试试这个:
文件:tst2.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    include ("tst3.php");
?>

文件:tst3.php

<?php
    // Missing " and ;
    echo "Testing
?>

现在运行tst2设置错误报告,然后包括tst3。您将看到:
分析错误:语法错误,意外的文件结尾,在tst3.php的第4行需要变量(t\u variable)或${(t\u dollar\u open\u curly\u braces)或{$(t\u curly\u open)

fcg9iug3

fcg9iug320#

在php文件所在的文件夹中创建一个名为php.ini的文件。
在php.ini中添加以下代码(我给出了一个显示代码的简单错误):

display_errors = on

display_startup_errors = on
1mrurvl1

1mrurvl121#

在index.php文件中设置:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
anhgbhbe

anhgbhbe22#

用途:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

这是编写它的最佳方法,但是语法错误会产生空白输出,因此请使用控制台检查语法错误。调试php代码的最佳方法是使用控制台;运行以下命令:

php -l phpfilename.php
uqjltbpv

uqjltbpv23#

这将起作用:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>
swvgeqrz

swvgeqrz24#

您可能会发现“错误报告”或“显示错误”的所有设置在php中似乎都不起作用 7.这是因为错误处理发生了变化。请尝试以下操作:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

或者,一次性捕获异常和错误(这与php不向后兼容) 5):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
wbrvyc0a

wbrvyc0a25#

一些web宿主提供程序允许您在 .htaccess 文件。
可以添加以下行:

php_value display_errors 1

我和你有同样的问题,这个解决方案解决了。

ki1q1bka

ki1q1bka26#

要显示所有错误,您需要:
1.在从浏览器调用的php脚本中包含这些行(通常是 index.php ):

error_reporting(E_ALL);
ini_set('display_errors', '1');

2.(a)确保此脚本没有语法错误
-或者-
2.(b)套 display_errors = On 在你的 php.ini 否则,它连这两条线都跑不了!
您可以通过运行(在命令行)检查脚本中的语法错误:

php -l index.php

如果包含来自另一个php脚本的脚本,那么它将在包含的脚本中显示语法错误。例如: index.php ```
error_reporting(E_ALL);
ini_set('display_errors', '1');

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';
`my_script.php`
adjfkj // This syntax error will be displayed in the browser

ngynwnxp

ngynwnxp27#

在php.ini中:

display_errors = on

然后重新启动web服务器。

bqujaahr

bqujaahr28#

在运行时启用错误输出时,您无法捕获解析错误,因为它在实际执行任何操作之前解析文件(并且由于在此过程中遇到错误,因此不会执行任何操作)。您需要更改实际的服务器配置,以便启用“显示错误”,并使用适当的错误报告级别。如果您没有访问php.ini的权限,则可以使用.htaccess或类似的工具,具体取决于服务器。
此问题可能提供其他信息。

相关问题