运行时配置

这些函数的行为受 php.ini 中的设置影响。

错误和日志记录配置选项
名称 默认值 可更改 变更日志
error_reporting NULL INI_ALL  
display_errors "1" INI_ALL  
display_startup_errors "1" INI_ALL 在 PHP 8.0.0 之前,默认值为 "0"
log_errors "0" INI_ALL  
log_errors_max_len "1024" INI_ALL 从 PHP 8.0.0 开始没有效果,从 PHP 8.1.0 开始移除。
ignore_repeated_errors "0" INI_ALL  
ignore_repeated_source "0" INI_ALL  
report_memleaks "1" INI_ALL  
track_errors "0" INI_ALL 从 PHP 7.2.0 开始弃用,从 PHP 8.0.0 开始移除。
html_errors "1" INI_ALL  
xmlrpc_errors "0" INI_SYSTEM  
xmlrpc_error_number "0" INI_ALL  
docref_root "" INI_ALL  
docref_ext "" INI_ALL  
error_prepend_string NULL INI_ALL  
error_append_string NULL INI_ALL  
error_log NULL INI_ALL  
error_log_mode 0o644 INI_ALL 从 PHP 8.2.0 开始可用
syslog.facility "LOG_USER" INI_SYSTEM 从 PHP 7.3.0 开始可用。
syslog.filter "no-ctrl" INI_ALL 从 PHP 7.3.0 开始可用。
syslog.ident "php" INI_SYSTEM 从 PHP 7.3.0 开始可用。
有关 INI_* 模式更多详细信息和定义,请参阅 配置设置的设置位置

以下是配置指令的简要说明。

error_reporting int

设置错误报告级别。参数可以是表示位域的整数,也可以是命名常量。错误报告级别和常量在 预定义常量php.ini 中有描述。要进行运行时设置,请使用 error_reporting() 函数。另请参阅 display_errors 指令。

默认值为 E_ALL

在 PHP 8.0.0 之前,默认值为:E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED。这意味着不会显示 E_NOTICEE_STRICTE_DEPRECATED 级别的诊断信息。

注意: PHP 常量在 PHP 之外

在 PHP 之外使用 PHP 常量,例如在 httpd.conf 中,将没有实际意义,因此在这种情况下需要使用 int 值。由于错误级别会随着时间的推移而增加,因此最大值(对于 E_ALL)可能会发生变化。因此,在 E_ALL 的位置,考虑使用更大的值来涵盖当前和将来所有的位域,例如 2147483647(包括所有错误,而不仅仅是 E_ALL)。

display_errors string

这决定了错误是否应该作为输出的一部分打印到屏幕上,或者是否应该对用户隐藏。

"stderr" 将错误发送到 stderr 而不是 stdout

注意:

这是一个支持您开发的功能,永远不要在生产系统(例如连接到互联网的系统)上使用它。

注意:

虽然可以在运行时设置 display_errors(使用 ini_set()),但如果脚本有致命错误,它将没有任何效果。这是因为所需的运行时操作无法执行。

display_startup_errors bool

即使 display_errors 为开,在 PHP 启动序列期间发生的错误也不会显示。强烈建议保持 display_startup_errors 关闭,除非用于调试。

log_errors bool

指示脚本错误消息是否应该记录到服务器的错误日志或 error_log。因此,此选项是特定于服务器的。

注意:

强烈建议您在生产网站上使用错误日志记录,而不是错误显示。

log_errors_max_len int

设置 log_errors 的最大长度(以字节为单位)。在 error_log 中,会添加有关源的信息。默认值为 1024,而 0 表示不应用任何最大长度。此长度应用于记录的错误、显示的错误以及 $php_errormsg,但不应用于显式调用的函数,例如 error_log()

当使用 int 时,值以字节为单位。也可以使用 此 FAQ 中描述的简写符号。
ignore_repeated_errors bool

不记录重复的消息。重复的错误必须出现在同一个文件中的同一行,除非 ignore_repeated_source 设置为 true。

ignore_repeated_source bool

忽略消息的来源时忽略重复的消息。当此设置为 On 时,您将不会记录来自不同文件或源代码行的重复消息的错误。

report_memleaks bool

如果此参数设置为 On(默认值),则此参数将显示 Zend 内存管理器检测到的内存泄漏报告。此报告将发送到 Posix 平台上的 stderr。在 Windows 上,它将使用 OutputDebugString() 发送到调试器,可以使用 » DbgView 等工具查看。此参数仅在调试版本中有效,并且如果 error_reporting 包含 E_WARNING 在允许的列表中。

track_errors bool

如果启用,则最后一条错误消息将始终存在于变量 $php_errormsg 中。

html_errors bool

如果启用,错误消息将包含 HTML 标记。HTML 错误的格式会生成可点击的消息,引导用户到一个页面,该页面描述了导致错误的错误或函数。这些引用受 docref_rootdocref_ext 影响。

如果禁用,错误消息将仅为纯文本。

xmlrpc_errors bool

如果启用,将关闭正常的错误报告并将错误格式化为 XML-RPC 错误消息。

xmlrpc_error_number int

用作 XML-RPC faultCode 元素的值。

docref_root string

新的错误格式包含对描述错误或导致错误的函数的页面的引用。对于手册页,您可以下载您语言的手册并将此 ini 指令设置为本地副本的 URL。如果您的手册本地副本可以通过 "/manual/" 访问,则只需使用 docref_root=/manual/。此外,您还需要设置 docref_ext 以匹配副本的文件扩展名 docref_ext=.html。可以使用外部引用。例如,您可以使用 docref_root=http://manual/en/docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

大多数情况下,您希望 docref_root 值以斜杠 "/" 结尾。但请参见上面的第二个示例,它没有也不需要它。

注意:

这是一个支持您开发的功能,因为它可以轻松查找函数描述。但是,永远不要在生产系统(例如连接到互联网的系统)上使用它。

docref_ext string

参见 docref_root

注意:

docref_ext 的值必须以点 "." 开头。

error_prepend_string string

在错误消息之前输出的字符串。仅在错误消息显示在屏幕上时使用。主要目的是能够在错误消息之前添加额外的 HTML 标记。

error_append_string string

在错误消息之后输出的字符串。仅在错误消息显示在屏幕上时使用。主要目的是能够在错误消息之后添加额外的 HTML 标记。

error_log 字符串

记录脚本错误的日志文件名。 该文件应该可由 Web 服务器的用户写入。 如果使用特殊值 syslog,则错误将发送到系统日志记录器。 在 Unix 上,这意味着 syslog(3),而在 Windows 上,这意味着事件日志。 另请参阅:syslog()。 如果未设置此指令,则错误将发送到 SAPI 错误日志记录器。 例如,它是 Apache 中的错误日志或 CLI 中的 stderr。 另请参阅 error_log()

error_log_mode 整数

error_log 中设置的文件的描述符文件模式。

syslog.facility 字符串

指定记录消息的程序类型。 仅在 error_log 设置为“syslog”时有效。

syslog.filter 字符串

指定用于过滤记录消息的过滤器类型。 允许的字符将原样传递; 所有其他字符都将以 \x 为前缀的十六进制表示形式写入。

  • all – 记录的字符串将在换行符处拆分,所有字符都将原样传递
  • ascii – 记录的字符串将在换行符处拆分,任何不可打印的 7 位 ASCII 字符都将被转义
  • no-ctrl – 记录的字符串将在换行符处拆分,任何不可打印的字符都将被转义
  • raw – 所有字符都将原样传递到系统日志记录器,不会在换行符处拆分(与 PHP 7.3 之前的版本相同)
此设置将影响通过 error_log 设置为“syslog”的日志记录以及对 syslog() 的调用。

注意:

raw 过滤器类型从 PHP 7.3.8 和 PHP 7.4.0 开始可用。

此指令在 Windows 上不受支持。
syslog.ident 字符串

指定附加到每条消息的标识字符串。 仅在 error_log 设置为“syslog”时有效。

添加说明

用户贡献的说明 2 个说明

cjakeman at bcs dot org
15 年前
使用
<?php ini_set('display_errors', 1); ?>
在脚本顶部不会捕获任何解析错误。 缺少 ")" 或 ";" 仍然会导致空白页面。

这是因为整个脚本在执行之前都会被解析。 如果你无法更改 php.ini 并设置

display_errors 开启

那么在 error_reporting 下有一个可能的解决方案

<?php
error_reporting
(E_ALL);
ini_set("display_errors", 1);
include(
"file_with_errors.php");
?>


[由版主修改]

您还应该考虑在开发模式下在 php.ini 中设置 error_reporting = -1 以及 display_errors = On,以便查看所有致命/解析错误,或者将 error_log 设置为所需的文件以记录生产中的错误而不是 display_errors(这需要将 log_errors 打开)。
ohcc at 163 dot com
7 年前
如果您将 error_log 指令设置为相对路径,则它是相对于文档根目录的路径,而不是 php 的包含文件夹。
To Top