php报错 - 打印php错误
我如何获得PHP错误显示? (16)
我检查了我的PHP ini
文件,显示错误已设置,错误报告也是E_ALL
。 我重新启动了我的Apache Web服务器。
我甚至将这些行放在脚本的顶部,它甚至不会捕获简单的分析错误。 例如,我用"$"
声明变量并且不关闭语句";"
。 但是我的所有脚本都显示了这些错误的空白页面,但我希望在浏览器输出中看到错误 。
error_reporting(E_ALL);
ini_set('display_errors', 1);
剩下的事情是什么?
一些虚拟主机提供商允许您在.htaccess文件中更改PHP参数。
您可以添加以下行:
php_value display_errors 1
我的问题与您的问题相同,并且此解决方案修复了此问题。
你可以做如下的事情:
在主索引文件中设置下面的参数
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
写吧:
error_reporting(-1);
在PHP文件所在的文件夹中创建一个名为php.ini的文件。
在php.ini中添加下面的代码(我给出了一个显示代码的简单错误):
display_errors = on
display_startup_errors = on
在你的php.ini里面:
display_errors = on
然后重新启动您的Web服务器
在运行时启用错误输出时,您无法捕获分析错误,因为它在实际执行任何操作之前解析文件(并且由于在此期间遇到错误,它不会执行任何操作)。 您需要更改实际的服务器配置,以便启用display_errors并使用适当的error_reporting级别。 如果您无权访问php.ini,则可以使用.htaccess或类似的文件,具体取决于服务器。
这个问题可能会提供更多信息。
如果尽管遵循了上述所有答案(或者您无法编辑php.ini文件),但仍然无法获得错误消息,请尝试制作一个新的PHP文件,以启用错误报告并包含问题文件。 例如:
error_reporting(9999999);
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 {
...
}
如果您安装了xdebug,则可以通过设置覆盖每个设置:
xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;
force_display_errors
类型:int,默认值:0,在Xdebug> = 2.3中引入如果此设置设置为1,则无论PHP的display_errors设置如何,都会显示错误。
force_error_reporting
类型:int,默认值:0,在Xdebug> = 2.3中引入此设置是一个位掩码,如error_reporting。 该位掩码将与error_reporting表示的位掩码进行逻辑“或”运算以识别应显示哪些错误。 此设置只能在php.ini中进行,无论应用程序使用ini_set()如何,都可以强制显示某些错误。
当使用PHP作为Apache模块时,我们可以使用Apache配置文件(例如httpd.conf)和.htaccess文件中的指令来更改配置设置。 您将需要“AllowOverride选项”或“AllowOverride All”权限才能这样做。
检查这个
http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess
您可以添加自己的自定义错误处理程序,它可以提供额外的调试信息。 此外,您可以将其设置为通过电子邮件发送给您。
function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
$msg="<b>Someting 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");
我通常会在我的普通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 = 'Prod url'; /* https://google.com */
error_reporting(0);
/* Mechanism to log errors */
break;
default:
exit('The application environment is not set correctly.');
}
}
希望这可以帮助。
正如我们现在运行PHP7,这里给出的答案不再正确。 唯一还算可以的就是Frank Forte,他谈到了PHP7。 另一方面,不是试图用try / catch来捕捉错误,而是使用一个技巧:use include。 这里有3段代码:
文件:tst1.php
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>
在PHP7中运行它将不会显示任何内容
现在,试试这个:
文件: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中的{
这对我来说总是有效的:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
但是,这并不会导致PHP显示解析错误 - 显示这些错误的唯一方法是使用以下行修改您的php.ini:
display_errors = on
这将工作:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
这是一个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_reporting() 。
顶部的这个代码应该工作error_reporting(E_ALL);
然而,尝试在文件中编辑手机上的代码
error_reporting = on