频道栏目
首页 > 程序开发 > Web开发 > php > 正文
PHP错误和日志函数
2017-05-17 09:42:00      个评论    来源:张思军的博客  
收藏   我要投稿

PHP错误和日志函数

error_reporting     NULL    设置 PHP 的报错级别并返回当前级别(数字或常量)。     PHP_INI_ALL
display_errors  "1"     该选项设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示。
注意: 该特性不要在上线生产环境中使用 (在开发测试过程中使用)    PHP_INI_ALL
display_startup_errors  "0"     即使 display_errors 设置为开启, PHP 启动过程中的错误信息也不会被显示。强烈建议除了调试目的以外,将 display_startup_errors 设置为关闭。  PHP_INI_ALL
log_errors  "0"     设置是否将脚本运行的错误信息记录到服务器错误日志或者error_log之中。注意,这是与服务器相关的特定配置项。    PHP_INI_ALL
log_errors_max_len  "1024"  设置 log_errors 的最大字节数. 在 error_log 会添加有关错误源的信息。默认值为1024,如果设置为0表示不限长度。该长度设置对记录的错误,显示的错误,以及 $php_errormsg都会有限制作用。     PHP_INI_ALL
ignore_repeated_errors  "0"     不记录重复的信息。重复的错误必须出现在同一个文件中的同一行代码上,除非 ignore_repeated_source 设置为true。     PHP_INI_ALL
ignore_repeated_source  "0"     忽略重复消息时,也忽略消息的来源。当该设置开启时,重复信息将不会记录它是由不同的文件还是不同的源代码行产生的。     PHP_INI_ALL
report_memleaks     "1"     如果这个参数设置为Off,则内存泄露信息不会显示 (在 stdout 或者日志中)。  PHP_INI_ALL
track_errors    "0"     如果开启,最后的一个错误将永远存在于变量 $php_errormsg 中。  PHP_INI_ALL
html_errors     "1"     在错误信息中关闭HTML标签。     PHP_INI_ALL
PHP_INI_SYSTEM in PHP <= 4.2.3.
xmlrpc_errors   "0"     关闭正常的错误报告,并将错误的格式设置为XML-RPC错误信息的格式。     PHP_INI_SYSTEM
xmlrpc_error_number     "0"     用作 XML-RPC faultCode 元素的值。  PHP_INI_ALL
docref_root     ""  新的错误信息格式包含了对应的参考页面,该页面对错误进行具体描述,或者描述了导致该错误发生的函数。
为了提供手册的页面,你可以在PHP官方站点下载对应语言的手册,并在ini中设置网址到本地对应的地址。
如果你的本地手册拷贝可以使用"/manual/" 访问,你就可以简单的设置 docref_root=/manual/。
另外你还需要设置 docref_ext 匹配你本地文件的后缀名 docref_ext=.html。当然也可以设置一个外部的参考地址。
例如你可以设置 docref_root=https://manual/en/ 或者 docref_root="https://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"    PHP_INI_ALL
docref_ext  ""  参见 docref_root.     PHP_INI_ALL
error_prepend_string    NULL    错误信息之前输出的内容。    PHP_INI_ALL
error_append_string     NULL    错误信息之后输出的内容。    PHP_INI_ALL
error_log   NULL    设置脚本错误将被记录到的文件。该文件必须是web服务器用户可写的。   PHP_INI_ALL

1 debug_backtrace() 函数生成 backtrace。

语法:debug_backtrace() 

返回值:
function    string  当前的函数名。
line    integer     当前的行号。
file    string  当前的文件名。
class   string  当前的类名。
object  object  当前对象。
type    string  当前的调用类型,可能的调用:

    返回:"->" - 方法调用
    返回:"::" - 静态方法调用
    返回 nothing - 函数调用

args    array   如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。



例:function one($str1, $str2)
{
two("Glenn", "Quagmire");
}
function two($str1, $str2)
{
three("Cleveland", "Brown");
}
function three($str1, $str2)
{
print_r(debug_backtrace());
}

one("Peter", "Griffin");

结果:

Array
(
[0] => Array
(
[file] => C:webfoldertest.php
[line] => 7
[function] => three
[args] => Array
(
[0] => Cleveland
[1] => Brown
)
)
[1] => Array
(
[file] => C:webfoldertest.php
[line] => 3
[function] => two
[args] => Array
(
[0] => Glenn
[1] => Quagmire
)
)
[2] => Array
(
[file] => C:webfoldertest.php
[line] => 14
[function] => one
[args] => Array
(
[0] => Peter
[1] => Griffin
)
)
) 

2 debug_print_backtrace() 函数打印 backtrace。

语法:debug_print_backtrace()

例:
function one($str1, $str2)
{
two("Glenn", "Quagmire");
}
function two($str1, $str2)
{
three("Cleveland", "Brown");
}
function three($str1, $str2)
{
debug_print_backtrace();
}

one("Peter", "Griffin");


结果:
#0 three(Cleveland, Brown) called at [C:webfoldertest.php:8]
#1 two(Glenn, Quagmire) called at [C:webfoldertest.php:4]
#2 one(Peter, Griffin) called at [C:webfoldertest.php:15]

3 error_get_last() 函数获得最后发生的错误。

该函数以数组的形式返回最后发生的错误。如果没有错误发生则返回 NULL。
返回的错误数组包含 4 个键名和键值:
[type] - 错误类型
[message] - 错误消息
[file] - 发生错误所在的文件
[line] - 发生错误所在的行



语法:error_get_last()



例:
echo $test;
print_r(error_get_last());


结果:
Array
(
[type] => 8
[message] => Undefined variable: test
[file] => C:webfoldertest.php
[line] => 2
)

3 error_log() 函数向服务器错误记录、文件或远程目标发送一个错误。

语法:error_log(error,type,destination,headers)
参数
error   必需。要记录的错误消息。

type    可选。规定错误记录的类型。
可能的记录类型:
0 - 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件。
1 - 错误被发送到 destination 参数中的地址。只有该类型使用 headers 参数。
2 - 通过 PHP debugging 连接来发送错误。该选项只在 PHP 3 中可用。
3 - 错误发送到文件目标字符串。

destination 可选。规定向何处发送错误消息。该参数的值依赖于 "type" 参数的值。

headers 可选。只在 "type" 参数为 1 时使用。规定附加的头部,比如 From, Cc 以及 Bcc。附加头部由 CRLF (\r\n) 分隔。
注意:在发送电子邮件时,必须包含 From 头部。可以在 php.ini 文件中或者通过此参数设置。


例:
$test=2;

if ($test>1)
{
error_log("A custom error has been triggered",
1,"someone@example.com","From: webmaster@example.com");
}


结果:
A custom error has been triggered

4 error_reporting() 函数规定报告哪个错误。

语法:error_reporting(report_level)

report_level    可选。规定当前脚本的错误报告级别。值数字和常量名都能接受,但是,考虑未来的 PHP 版本的兼容性,推荐使用常量名。


报告级别:
1   E_ERROR 运行时致命的错误。不能修复的错误。停止执行脚本。
2   E_WARNING   运行时非致命的错误。没有停止执行脚本。
4   E_PARSE 编译时的解析错误。解析错误应该只由解析器生成。
8   E_NOTICE    运行时的通知。脚本发现可能是一个错误,但也可能在正常运行脚本时发生。
16  E_CORE_ERROR    PHP 启动时的致命错误。这就如同 PHP 核心的 E_ERROR。
32  E_CORE_WARNING  PHP 启动时的非致命错误。这就如同 PHP 核心的 E_WARNING。
64  E_COMPILE_ERROR 编译时致命的错误。这就如同由 Zend 脚本引擎生成的 E_ERROR。
128 E_COMPILE_WARNING   编译时非致命的错误。这就如同由 Zend 脚本引擎生成的 E_WARNING。
256 E_USER_ERROR    用户生成的致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR。
512 E_USER_WARNING  用户生成的非致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING。
1024    E_USER_NOTICE   用户生成的通知。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE。
2048    E_STRICT    运行时的通知。PHP 建议您改变代码,以提高代码的互用性和兼容性。
4096    E_RECOVERABLE_ERROR 可捕获的致命错误。这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())。
8191    E_ALL   所有的错误和警告的级别,除了 E_STRICT(自 PHP 6.0 起,E_STRICT 将作为 E_ALL的一部分)。


例:
//Disable error reporting
error_reporting(0);

//Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

//Report all errors
error_reporting(E_ALL);



5 restore_error_handler() 函数恢复之前的错误处理程序。

语法:restore_error_handler()

例:
//custom error handler function
function customError($errno, $errstr, $errfile, $errline)
{
echo "Custom error: [$errno] $errstr
";
echo " Error on line $errline in $errfile
";
}

//set user-defined error handler
set_error_handler("customError");

$test=2;

//trigger error
if ($test>1)
{
trigger_error("A custom error has been triggered");
}

//restore built-in error handler
restore_error_handler();

//trigger error again
if ($test>1)
{
trigger_error("A custom error has been triggered");
}


结果:
Custom error: [1024] A custom error has been triggered
Error on line 14 in C:webfoldertest.php

Notice: A custom error has been triggered in 
C:webfoldertest.php on line 21

6 restore_exception_handler() 函数恢复之前的异常处理程序。

语法:restore_exception_handler()

例:
restore_exception_handler();

throw new Exception('Uncaught Exception occured');

结果:
Fatal error: Uncaught exception 'Exception' with message
'Uncaught Exception occured' in C:webfoldertest.php:4
Stack trace: #0 {main} thrown in C:webfoldertest.php on line 4

7 set_error_handler() 函数设置用户自定义的错误处理函数。

语法:set_error_handler(error_function,error_types)
error_function  必需。规定发生错误时运行的函数。
error_types 可选。规定在哪个错误报告级别会显示用户定义的错误。默认是 "E_ALL"。可能的错误报告级别详见下面的表格。



语法:
error_function(error_level,error_message,
error_file,error_line,error_context)

error_level 必需的。规定用户自定义的错误的错误报告级别。必须是值数字。可能的错误报告级别详见下面的表格。
error_message   必需的。规定用户自定义的错误的错误消息。
error_file  可选。规定发生错误的文件名。
error_line  可选。规定发生错误的行号。
error_context   可选。规定指向活跃符号表中发生错误的数组。换句话说,error_context 将包含一个说明每个变量引发错误的存在范围的数组。


错误报告级别

2   E_WARNING   运行时非致命的错误。没有停止执行脚本。
8   E_NOTICE    运行时的通知。脚本发现可能是一个错误,但也可能在正常运行脚本时发生。
256 E_USER_ERROR    用户生成的致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR。
512 E_USER_WARNING  用户生成的非致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING。
1024    E_USER_NOTICE   用户生成的通知。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE。
4096    E_RECOVERABLE_ERROR 可捕获的致命错误。这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())。
8191    E_ALL   所有的错误和警告的级别,除了 E_STRICT(自 PHP 6.0 起,E_STRICT 将作为 E_ALL的一部分)。


例:
//error handler function
function customError($errno, $errstr, $errfile, $errline)
{
echo "Custom error: [$errno] $errstr
";
echo " Error on line $errline in $errfile
";
echo "Ending Script";
die();
}

//set error handler
set_error_handler("customError");

$test=2;

//trigger error
if ($test>1)
{
trigger_error("A custom error has been triggered");
}


结果:
Custom error: [1024] A custom error has been triggered
Error on line 19 in C:webfoldertest.php
Ending Script

8 set_exception_handler() 函数设置用户自定义的异常处理函数。

语法:set_exception_handler(exception_function)
参数:
exception_function  必需。规定未捕获的异常发生时调用的函数。
该函数必须在调用 set_exception_handler() 函数之前定义。这个异常处理函数需要需要一个参数,即抛出的 exception 对象。


例:
function myException($exception)
{
echo "Exception: " , $exception->getMessage();
}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');

结果:Exception: Uncaught Exception occurred

9 trigger_error() 函数创建用户自定义的错误消息。

语法:trigger_error(error_message,error_types)

error_message   必需。规定错误消息。长度限制为 1024 个字符。
error_types 可选。规定错误消息的错误类型。
可能的错误类型:
E_USER_ERROR - 用户生成的运行时的致命错误。不能恢复的错误。停止执行脚本。
E_USER_WARNING - 用户生成的运行时的非致命警告。脚本没有停止执行。
E_USER_NOTICE - 默认。用户生成的运行时的通知。脚本发现可能是一个错误,但也可能在脚本正常运行时发生。



实例:
$test=2;
if ($test>1)
{
trigger_error("A custom error has been triggered");
}


结果:
Notice: A custom error has been triggered
in C:webfoldertest.php on line 6


10 user_error() 函数创建用户自定义的错误消息。

语法:user_error(error_message,error_types)
error_message   必需。规定错误消息。长度限制为 1024 个字符。
error_types 可选。规定错误消息的错误类型。
可能的错误类型:
E_USER_ERROR - 用户生成的运行时的致命错误。不能恢复的错误。停止执行脚本。
E_USER_WARNING - 用户生成的运行时的非致命警告。脚本没有停止执行。
E_USER_NOTICE - 默认。用户生成的运行时的通知。脚本发现可能是一个错误,但也可能在脚本正常运行时发生。


例:
$test=2;
if ($test>1)
{
user_error("A custom error has been triggered");
}


结果;
Notice: A custom error has been triggered
in C:webfoldertest.php on line 6

点击复制链接 与好友分享!回本站首页
上一篇:解决Nginx下ThinkPHP框架中的U方法失效问题
下一篇:PHP防止盗链防止迅雷下载的方法
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训

版权所有: 红黑联盟--致力于做实用的IT技术学习网站