企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# 错误处理扩展(PHP 核心) PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实际需要. 通过日志记录功能,你可以将信息直接发送到其他日志服务器,或者发送到指定的电子邮箱(或者通过邮件网关发送),或者发送到操作系统日志等,从而可以有选择的记录和监视你的应用程序和网站的最重要的部分。 错误报告功能允许你自定义错误反馈的级别和类型,可以是简单的提示信息或者使用自定义的函数进行处理并返回信息. ## 运行时配置 **错误和日志记录配置选项** 名字默认可修改范围更新日志说明[error\_reporting](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-reporting)NULLPHP\_INI\_ALL设置错误报告的级别,也可在脚本使用error\_reporting()设置; 在 PHP5.3 及以上版本中,默认值为 **`E_ALL`** & ~ **`E_NOTICE`** & ~ **`E_STRICT`** & ~ **`E_DEPRECATED`** 。 该设置不会显示 **`E_NOTICE`** 、**`E_STRICT`**、**`E_DEPRECATED`** 级错误提示。在开发时可以把它们显示出来。 在 PHP 5.3.0 以前版本中,默认值是 **`E_ALL`** & ~ **`E_NOTICE`** & ~ **`E_STRICT`**。 在 PHP 4 中,默认值是 **`E_ALL`** & ~ **`E_NOTICE`** **`E_STRICT`** (PHP 5+): 并不包含在\*\*`E_ALL`\*\*之中,你必须明确启用才能显示这个类别的错误信息。在开发阶段启用 **`E_STRICT`** 会有一些好处。严格的信息将帮助你使用最新和最好的建议的方法来编写代码,例如它会警告你使用了将被废弃的函数[display\_errors](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.display-errors)"1"PHP\_INI\_ALL设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示;也可以在运行时设置 (使用[ini\_set()](https://www.php.net/manual/zh/function.ini-set.php))[display\_startup\_errors](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.display-startup-errors)"0"PHP\_INI\_ALL即使 display\_errors 设置为开启, PHP 启动过程中的错误信息也不会被显示。强烈建议除了调试目的以外,将 display\_startup\_errors 设置为关闭。[log\_errors](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.log-errors)"0"PHP\_INI\_ALL设置是否将脚本运行的错误信息记录到服务器错误日志或者[error\_log](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-log)之中。注意,这是与服务器相关的特定配置项。[log\_errors\_max\_len](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.log-errors-max-len)"1024"PHP\_INI\_ALLAvailable since PHP 4.3.0.设置 log\_errors 的最大字节数. 在[error\_log](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-log)会添加有关错误源的信息。默认值为1024,如果设置为0表示不限长度[ignore\_repeated\_errors](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.ignore-repeated-errors)"0"PHP\_INI\_ALLAvailable since PHP 4.3.0.不记录重复的信息。重复的错误必须出现在同一个文件中的同一行代码上,除非[ignore\_repeated\_source](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.ignore-repeated-source)设置为true[ignore\_repeated\_source](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.ignore-repeated-source)"0"PHP\_INI\_ALLAvailable since PHP 4.3.0.忽略重复消息时,也忽略消息的来源。当该设置开启时,重复信息将不会记录它是由不同的文件还是不同的源代码行产生的[report\_memleaks](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.report-memleaks)"1"PHP\_INI\_ALLAvailable since PHP 4.3.0.如果这个参数设置为Off,则内存泄露信息不会显示 (在 stdout 或者日志中),这只对调试编译有效,而且需要[error\_reporting](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-reporting)包含了\*\*`E_WARNING`\*\*才会起作用[track\_errors](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.track-errors)"0"PHP\_INI\_ALL如果开启,最后的一个错误将永远存在于变量[$php\_errormsg](https://www.php.net/manual/zh/reserved.variables.phperrormsg.php)中[html\_errors](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.html-errors)"1"PHP\_INI\_ALLPHP\_INI\_SYSTEM in PHP <= 4.2.3.在错误信息中关闭HTML标签。这种新的HTML格式的错误信息是可以点击,它引导用户前往描述该错误或者导致该错误发生的函数的参考信息页面。 这些参考与[docref\_root](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.docref-root)和[docref\_ext](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.docref-ext)的设置有关[xmlrpc\_errors](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.xmlrpc-errors)"0"PHP\_INI\_SYSTEMAvailable since PHP 4.1.0.关闭正常的错误报告,并将错误的格式设置为XML-RPC错误信息的格式[xmlrpc\_error\_number](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.xmlrpc-error-number)"0"PHP\_INI\_ALLAvailable since PHP 4.1.0.用作 XML-RPC faultCode 元素的值。[docref\_root](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.docref-root)""PHP\_INI\_ALLAvailable since PHP 4.3.0.新的错误信息格式包含了对应的参考页面,该页面对错误进行具体描述,或者描述了导致该错误发生的函数。为了提供手册的页面,你可以在PHP官方站点下载对应语言的手册,并在ini中设置网址到本地对应的地址。如果你的本地手册拷贝可以使用\*"/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](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.docref-ext)""PHP\_INI\_ALLAvailable since PHP 4.3.2.参见docref\_root.docref\_ext的值必须以\*"."\*开头.[error\_prepend\_string](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-prepend-string)NULLPHP\_INI\_ALL错误信息之前输出的内容[error\_append\_string](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-append-string)NULLPHP\_INI\_ALL错误信息之后输出的内容[error\_log](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-log)NULLPHP\_INI\_ALL设置脚本错误将被记录到的文件。该文件必须是web服务器用户可写的。如果特殊值*syslog*被设置,则将错误信息发送到系统日志记录器。在Unix以及类似系统上,使用的是 syslog(3) ,而在 Windows NT 类系统上则为事件日志。Windows 95上不支持系统日志记录。参见:[syslog()](https://www.php.net/manual/zh/function.syslog.php). 如果该配置没有设置,则错误信息会被发送到 SAPI 错误记录器。例如,出现在Apache的错误日志中,或者在CLI中发送到*stderr*。[syslog.facility](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.syslog.facility)"LOG\_USER"PHP\_INI\_SYSTEMAvailable as of PHP 7.3.0.指定记录日志信息的程序类型,仅在[error\_log](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-log)设置为 "syslog" 时有效[syslog.filter](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.syslog.filter)"no-ctrl"PHP\_INI\_ALLAvailable as of PHP 7.3.0.指定筛选器类型来筛选记录的消息.仅在[error\_log](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-log)为 "syslog" 时有效[syslog.ident](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.syslog.ident)"php"PHP\_INI\_SYSTEMAvailable as of PHP 7.3.0.设置每条日志消息前缀的识别字符串(ident string),仅在[error\_log](https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-log)为 "syslog" 时有效