Abs*_*Abs 1646 php error-reporting
我检查了我的php.ini
文件,并设置了显示错误,还有错误报告display_errors
.我重新启动了我的Apache Web服务器.
我甚至把这些行放在我的脚本的顶部,它甚至没有捕获简单的解析错误.例如,我使用a声明变量,E_ALL
而不是关闭语句"$"
.但是我的所有脚本都显示这些错误的空白页面,但我想在浏览器输出中看到错误.
error_reporting(E_ALL);
ini_set('display_errors', 1);
Run Code Online (Sandbox Code Playgroud)
还剩下什么?
Fan*_*ohn 3095
这对我来说总是有用的:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
但是,这不会使PHP显示解析错误 - 显示这些错误的唯一方法是使用以下行修改php.ini:
display_errors = on
Run Code Online (Sandbox Code Playgroud)
小智 139
在你的php.ini里面:
display_errors = on
Run Code Online (Sandbox Code Playgroud)
然后重新启动Web服务器.
and*_*dre 93
要显示您需要的所有错误:
1.在您从浏览器调用的PHP脚本中有这些行(通常index.php
):
error_reporting(E_ALL);
ini_set('display_errors', '1');
Run Code Online (Sandbox Code Playgroud)
2.(a)确保此脚本没有语法错误
-要么-
2.(b)设置display_errors = On
在你的php.ini
否则,它甚至无法运行那两行!
您可以通过运行(在命令行)检查脚本中的语法错误:
php -l index.php
Run Code Online (Sandbox Code Playgroud)
如果您包括从另一个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';
Run Code Online (Sandbox Code Playgroud)
my_script.php
adjfkj // This syntax error will be displayed in the browser
Run Code Online (Sandbox Code Playgroud)
小智 48
某些Web托管提供程序允许您更改.htaccess
文件中的PHP参数.
您可以添加以下行:
php_value display_errors 1
Run Code Online (Sandbox Code Playgroud)
我和你的问题一样,这个解决方案修复了它.
Fra*_*rte 37
您可能会发现"错误报告"或"显示错误"的所有设置似乎都不适用于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'];
}
Run Code Online (Sandbox Code Playgroud)
或者,一次性捕获异常和错误(这与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'];
}
Run Code Online (Sandbox Code Playgroud)
Lea*_*per 31
这将有效:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
Run Code Online (Sandbox Code Playgroud)
Abh*_*tap 31
使用:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
这是编写它的最佳方法,但语法错误会产生空白输出,因此请使用控制台检查语法错误.调试PHP代码的最佳方法是使用控制台; 运行以下内容:
php -l phpfilename.php
Run Code Online (Sandbox Code Playgroud)
小智 20
在index.php文件中设置:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
小智 18
在PHP文件所在的文件夹中创建一个名为php.ini的文件.
在php.ini里面添加以下代码(我给出了一个显示代码的简单错误):
display_errors = on
display_startup_errors = on
Run Code Online (Sandbox Code Playgroud)
B.B*_*dan 16
这是一个PHP脚本:
<?php
ini_set("display_startup_errors", 1);
ini_set("display_errors", 1);
/* Reports for either E_ERROR | E_WARNING | E_NOTICE | Any Error*/
error_reporting(E_ALL);
echo(abc); /* Notice: abc is an undefined constant */
?>
Run Code Online (Sandbox Code Playgroud)
有关PHP错误的更详细说明,请访问PHP错误 - error_reporting().
jxm*_*ett 14
如果,尽管遵循了上述所有答案(或者您无法编辑php.ini文件),仍然无法收到错误消息,请尝试创建一个启用错误报告的新PHP文件,然后包含问题文件.例如:
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');
Run Code Online (Sandbox Code Playgroud)
尽管在我的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 {
...
}
Run Code Online (Sandbox Code Playgroud)
Cha*_*ari 14
我通常会在我的普通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.');
}
}
Run Code Online (Sandbox Code Playgroud)
小智 13
当使用PHP作为Apache模块时,我们可以使用Apache配置文件(例如httpd.conf)和.htaccess文件中的指令更改配置设置.您需要"AllowOverride Options"或"AllowOverride All"权限才能执行此操作.
检查一下
http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess
Pet*_*ter 13
由于我们现在运行的是PHP 7,因此这里给出的答案不再正确.唯一还可以的就是来自Frank Forte的那个,因为他谈到了PHP 7.
另一方面,您可以使用一个技巧:使用include,而不是尝试使用try/catch捕获错误.
这里有三段代码:
文件:tst1.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
// Missing " and ;
echo "Testing
?>
Run Code Online (Sandbox Code Playgroud)
在PHP 7中运行它将不显示任何内容.
现在,试试这个:
文件:tst2.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
include ("tst3.php");
?>
Run Code Online (Sandbox Code Playgroud)
文件:tst3.php
<?php
// Missing " and ;
echo "Testing
?>
Run Code Online (Sandbox Code Playgroud)
现在运行tst2设置错误报告,然后包含tst3.你会看见:
解析错误:第4行的语法错误,意外的文件结束,期望变量(T_VARIABLE)或$ {(T_DOLLAR_OPEN_CURLY_BRACES)或{$(T_CURLY_OPEN)在tst3.php中
chi*_*org 12
如果你发现自己处于无法修改设置的情况,php.ini
或者.htaccess
当你的PHP脚本包含解析错误时你显示错误是不幸的.然后,您必须解决在命令行上单击文件,如下所示:
find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"
Run Code Online (Sandbox Code Playgroud)
如果您的主机被锁定以至于不允许通过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.";
}
Run Code Online (Sandbox Code Playgroud)
web*_*.eu 12
已接受的答案,包括额外的选项。在我的开发 apache vhost 的 PHP 文件中(.htaccess,如果你能确保它不会投入生产):
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
然而,这并不会让 PHP 显示解析错误 - 显示这些错误的唯一方法是使用以下行修改 php.ini:
display_errors = on
Run Code Online (Sandbox Code Playgroud)
(如果您无权访问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
Run Code Online (Sandbox Code Playgroud)
Bin*_*iya 11
您可以执行以下操作:
在主索引文件中设置以下参数:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Run Code Online (Sandbox Code Playgroud)
然后根据您的要求,您可以选择要显示的内容:
对于所有错误,警告和通知:
error_reporting(E_ALL); OR error_reporting(-1);
Run Code Online (Sandbox Code Playgroud)
对于所有错误:
error_reporting(E_ERROR);
Run Code Online (Sandbox Code Playgroud)
对于所有警告:
error_reporting(E_WARNING);
Run Code Online (Sandbox Code Playgroud)
对于所有通知:
error_reporting(E_NOTICE);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看此处.
lin*_*abá 10
您可以添加自己的自定义错误处理程序,它可以提供额外的调试信息.此外,您可以将其设置为通过电子邮件向您发送信息.
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");
Run Code Online (Sandbox Code Playgroud)
如果是快速调试,则可以使用的最佳/便捷/快速解决方案是将代码与捕获的异常一起包围。这就是我想快速检查生产中的内容时要执行的操作。
try {
// Page code
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Run Code Online (Sandbox Code Playgroud)
上面的代码应该可以工作:
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
但是,尝试在文件中的手机上编辑代码:
error_reporting =on
Run Code Online (Sandbox Code Playgroud)
<?php
// Turn off error reporting
error_reporting(0);
// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Report all errors
error_reporting(E_ALL);
// Same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);
// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
?>
Run Code Online (Sandbox Code Playgroud)
当您的站点处于活动状态时,php.ini
出于安全原因,该文件应禁用 display_errors。但是,对于开发环境,可以启用 display_errors 进行故障排除。