我检查了我的PHP ini文件(PHP.ini),并设置了display_errors,错误报告也是E_ALL。我已重新启动Apache Web服务器。
我甚至把这些行放在了脚本的顶部,它甚至不能捕捉到简单的解析错误。例如,我用“$”声明变量,而不关闭语句“;”。但我的所有脚本都显示了这些错误的空白页面,但我希望在浏览器输出中看到这些错误。
error_reporting(E_ALL);
ini_set('display_errors', 1);
还有什么要做?
我检查了我的PHP ini文件(PHP.ini),并设置了display_errors,错误报告也是E_ALL。我已重新启动Apache Web服务器。
我甚至把这些行放在了脚本的顶部,它甚至不能捕捉到简单的解析错误。例如,我用“$”声明变量,而不关闭语句“;”。但我的所有脚本都显示了这些错误的空白页面,但我希望在浏览器输出中看到这些错误。
error_reporting(E_ALL);
ini_set('display_errors', 1);
还有什么要做?
当前回答
在Unix CLI中,只将错误重定向到文件是非常实用的:
./script 2> errors.log
在脚本中,可以像往常一样使用var_dump()或等效方法(STDOUT和STDERR都将接收输出),但只能在日志文件中写入:
fwrite(STDERR, "Debug infos\n"); // Write in errors.log^
然后从另一个shell中进行实时更改:
tail -f errors.log
或者干脆
watch cat errors.log
其他回答
在php.ini中:
display_errors = on
然后重新启动web服务器。
您可以添加自己的自定义错误处理程序,它可以提供额外的调试信息。此外,您可以将其设置为通过电子邮件向您发送信息。
function ERR_HANDLER($errno, $errstr, $errfile, $errline){
$msg = "<b>Something bad happened.</b> [$errno] $errstr <br><br>
<b>File:</b> $errfile <br>
<b>Line:</b> $errline <br>
<pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";
echo $msg;
return false;
}
function EXC_HANDLER($exception){
ERR_HANDLER(0, $exception->getMessage(), $exception->getFile(), $exception->getLine());
}
function shutDownFunction() {
$error = error_get_last();
if ($error["type"] == 1) {
ERR_HANDLER($error["type"], $error["message"], $error["file"], $error["line"]);
}
}
set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");
要显示所有错误,您需要:
1.在从浏览器(通常是index.PHP)调用的PHP脚本中包含以下行:
error_reporting(E_ALL);
ini_set('display_errors', '1');
2.(a)确保此脚本没有语法错误
—or—
2.(b)在php.ini中设置display_errors=打开
否则,它甚至无法运行这两条线!
您可以通过运行(在命令行)检查脚本中的语法错误:
php -l index.php
如果包含另一个PHP脚本中的脚本,那么它将在包含的脚本中显示语法错误。例如:
索引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
如果您发现自己处于无法通过php.ini或.htaccess修改设置的情况下,那么当您的php脚本包含解析错误时,您就不可能显示错误。然后,您必须解决以下问题:
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.";
}
已接受,包括额外选项。在我的DEVELOPMENT apache vhost(.htaccess,如果您可以确保它不会进入生产环境)的PHP文件中:
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
然而,这并不能使PHP显示解析错误-显示这些错误的唯一方法是使用以下行修改PHP.ini:
display_errors = on
(如果您没有访问php.ini的权限,那么在.htaccess中输入这一行也可以):
// I've added some extra options that set E_ALL as per https://www.php.net/manual/en/errorfunc.configuration.php.
php_flag log_errors on
php_flag display_errors on
php_flag display_startup_errors on
php_value error_reporting 2147483647
php_value error_log /var/www/mywebsite.ext/logs/php.error.log