我检查了我的PHP ini
文件并设置了显示错误,错误报告也是E_ALL
。我已经重新启动了我的Apache Web服务器。
我甚至将这些行放在我的脚本的顶部,它甚至没有捕获简单的解析错误。例如,我使用"$"
声明变量,并且我不关闭语句";"
。但是我的所有脚本都显示这些错误的空白页面,但我想在浏览器输出中看到错误。
error_reporting(E_ALL);
ini_set('display_errors', 1);
还剩下什么?
答案 0 :(得分:2961)
这对我来说总是有用的:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
但是,这不会使PHP显示解析错误 - 显示这些错误的唯一方法是使用以下行修改php.ini:
display_errors = on
答案 1 :(得分:145)
在运行时启用错误输出时,无法捕获解析错误,因为它在实际执行任何操作之前解析文件(并且由于在此期间遇到错误,因此不会执行任何操作)。您需要更改实际的服务器配置,以便启用display_errors并使用approriate error_reporting级别。如果您无权访问php.ini,则可以使用.htaccess或类似内容,具体取决于服务器。
This question可能会提供其他信息。
答案 2 :(得分:130)
在 php.ini :
中display_errors = on
然后重新启动您的网络服务器。
答案 3 :(得分:89)
显示您需要的所有错误:
<强> 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
答案 4 :(得分:43)
某些网络托管服务提供商允许您更改.htaccess
文件中的PHP参数。
您可以添加以下行:
php_value display_errors 1
我和你的问题一样,这个解决方案修复了它。
答案 5 :(得分:34)
您可能会发现“错误报告”或“显示错误”的所有设置似乎都不适用于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'];
}
答案 6 :(得分:29)
这将有效:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
答案 7 :(得分:28)
使用:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
这是编写它的最佳方法,但语法错误会产生空白输出,因此请使用控制台检查语法错误。调试PHP代码的最佳方法是使用控制台;运行以下内容:
php -l phpfilename.php
答案 8 :(得分:18)
在 index.php 文件中设置:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 9 :(得分:16)
在PHP文件所在的文件夹中创建一个名为 php.ini 的文件。
在php.ini中添加以下代码(我给出了一个显示代码的简单错误):
display_errors = on
display_startup_errors = on
答案 10 :(得分:14)
这是一个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 */
?>
有关PHP错误的更详细说明,请访问 PHP Error - error_reporting() 。
答案 11 :(得分:12)
如果,尽管遵循了上述所有答案(或者您无法编辑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 {
...
}
答案 12 :(得分:11)
当使用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
答案 13 :(得分:10)
由于我们现在正在运行PHP 7,因此这里给出的答案不再正确。唯一还可以的是the one from Frank Forte,因为他谈到了PHP 7。
另一方面,您可以使用一个技巧:使用include。而不是尝试使用try / catch捕获错误。
这里有三段代码:
档案: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。你会看到:
解析错误:第4行的语法错误,意外的文件结束,期望变量(T_VARIABLE)或$ {(T_DOLLAR_OPEN_CURLY_BRACES)或{$(T_CURLY_OPEN)在tst3.php中
答案 14 :(得分:10)
您可以执行以下操作:
在主索引文件中设置以下参数:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
然后根据您的要求,您可以选择要显示的内容:
所有错误,警告和通知:
error_reporting(E_ALL); OR error_reporting(-1);
对于所有错误:
error_reporting(E_ERROR);
对于所有警告:
error_reporting(E_WARNING);
对于所有通知:
error_reporting(E_NOTICE);
有关详情,请查看here。
答案 15 :(得分:10)
如果您发现自己处于无法通过php.ini
或.htaccess
修改设置的情况,那么当您的PHP脚本包含解析时,您将无法显示错误错误。然后,您必须像这样解决linting the files on the command line:
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.";
}
答案 16 :(得分:9)
我通常会在我的普通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.');
}
}
答案 17 :(得分:8)
您可以添加自己的自定义错误处理程序,它可以提供额外的调试信息。此外,您可以将其设置为通过电子邮件向您发送信息。
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");
答案 18 :(得分:4)
如果快速调试,您可以使用的最佳/简单/快速解决方案是通过捕获异常来包围您的代码。当我想在生产中快速检查某些东西时,这就是我正在做的事情。
try {
// Page code
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
答案 19 :(得分:4)
顶部的代码应该有效:
error_reporting(E_ALL);
但是,请尝试在文件中编辑手机上的代码:
error_reporting =on
答案 20 :(得分:2)
这就是我学到的东西。在PHP.INI文件中,
error_reporting = E_ALL
display_errors = On
答案 21 :(得分:2)
只需写下:
error_reporting(-1);
答案 22 :(得分:2)
<?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);
?>
当您的网站处于活动状态时,出于安全原因,php.ini
文件应禁用display_errors。但是,对于开发环境,可以启用display_errors进行故障排除。
答案 23 :(得分:2)
您可能要使用以下代码:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 24 :(得分:1)
如果您安装了Xdebug,则可以通过设置覆盖每个设置:
xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;
force_display_errors
类型:int,默认值:0,在Xdebug中引入&gt; = 2.3如果是这样 设置设置为1,无论如何都会始终显示错误 PHP&lt; display_errors的设置是什么。
force_error_reporting
类型:int,默认值:0,在Xdebug中引入&gt; = 2.3 此设置是一个位掩码,如error_reporting。该位掩码将与error_reporting to dermine表示的位掩码逻辑OR运算,应显示错误。此设置只能在php.ini中进行,并允许您强制显示某些错误,无论应用程序使用ini_set()做什么。
答案 25 :(得分:1)
您可以通过更改PHP.ini文件并添加以下内容
来完成此操作display_errors = on
display_startup_errors = on
或者您也可以使用以下代码,因为这始终对我有用
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);**strong text**
答案 26 :(得分:1)
报告所有错误,但E_NOTICE除外
error_reporting(E_ALL & ~E_NOTICE);
显示所有PHP错误
error_reporting(E_ALL); or ini_set('error_reporting', E_ALL);
关闭所有错误报告
error_reporting(0);
答案 27 :(得分:0)
除了php脚本中的php.ini和ini_set()函数之外,您还可以使用下面显示的.htaccess和httpd.conf指令执行相同的操作。一些托管服务提供商允许通过.htaccess和httpd.conf设置php设置。
php_flag display_startup_errors开启
php_flag display_errors开启
php_flag html_errors开启
php_flag log_errors
php_flag ignore_repeated_errors关闭
php_flag ignore_repeated_source关闭
php_flag report_memleaks上
php_flag跟踪错误
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/PHP_errors.log
php_value错误报告999999999
php_value错误报告-1
php_value log_errors_max_len 0
允许订单,拒绝
所有人拒绝
让所有人满意
答案 28 :(得分:0)
如果在命令行中,则可以将php
与-ddisplay_errors=1
运行,以覆盖php.ini
中的设置:
php -ddisplay_errors=1 script.php
答案 29 :(得分:0)
在unix cli中,重定向only errors to a file很实用:
./script 2> errors.log
然后从另一个外壳进行实时更改:
tail -f errors.log
或者简单地
watch cat errors.log
答案 30 :(得分:0)
您可以通过简单的方法在显示屏上显示Php错误。 首先,只需将以下代码放入您的php.ini文件中。
display_errors = on;
(如果您无权访问php.ini,则将该行放入.htaccess也可能有效):
php_flag display_errors 1
或者您也可以在index.php文件中使用以下代码
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 31 :(得分:0)
error_reporting(1);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
将此放在页面顶部。