이전 글에서는 "PHP의 오류 유형과 오류 수준을 이해하세요"를 가져왔는데, 여기서는 PHP의 오류 유형과 오류 수준을 자세히 소개했습니다. 이번 기사에서는 오류에 대해 살펴보겠습니다. PHP의 오류 유형 및 수준 오류 로그를 구성하고 사용하는 방법. 모두에게 도움이 되기를 바랍니다!
이전 기사에서는 PHP 오류의 예외 처리, 오류 유형 및 오류 수준을 소개했습니다. 다음으로 PHP에서 오류 로그 구성 및 사용을 소개하겠습니다. PHP 개발자의 경우 프로젝트가 사용되면 경로, 데이터베이스 연결, 데이터 테이블 및 기타 정보가 노출되는 것을 방지하기 위해 구성 파일 php.ini의 display_errors
옵션을 즉시 꺼야 합니다. 오류. display_errors
选项关闭,以免因为这些错误而透露路径、数据库连接、数据表等信息。
再投入使用的任何一个项目中,不可避免的会有错误的出现,有些错误报告对开发者是有用的,这时候我们可以通过单独的文本文件来进行错误报告的日志记录。这样的话,开发人员可以更轻松的进行查看系统是否存在问题。将PHP配置文件中的 log_errors
开启的话,就可以将程序中的错误报告写进错误日志中了。
其中这份错误报告会自动记录到服务器的日志文件中,想要发送到系统的syslog
中,也就是系统日志中,也是可以的。接下来我们就一起来看一下怎样去实现这样错误处理的方法吧。
通过指定文件记录错误报告
想要实现使用目标文件来记录错误报告日志,其中重要的是需要让这个制定的文件的位置在文档根目录外面,这样的话受到攻击的可能性较低,而且这个指定文件需要拥有一定的权限,首先我们先来看一下我们需要针对php.ini
的配置指令做出怎样的修改:
<strong>log_errors = On</strong>
;决定日志语句记录的位置
<strong>log_errors_max_len = 1024</strong>
;设置每个日志项的最大长度
<strong>error_reporting = E_ALL</strong>
;将会向PHP报告发生的每个错误
<strong>display_errors = Off</strong>
;不显示满足上条 指令所定义规则的所有错误报告
<strong>error_log = /usr/local/error.log</strong>
;指定产生的 错误报告写入的日志文件位置
按照上述的方式修改php.ini文件后,成功设置之后,在运行PHP的脚本文件的时候,就不会在浏览器中有显示错误报告了,这时候错误报告就都显示在这个我们设置的目标文件中,也就是错误日志中了。
另外还需要注意的是,这个目标文件中可以记录error_reporting
定义的错误也可以通过 error_log()
函数将错误信息放到服务器中的错误日志或者这个目标文件中。
error_log()
函数的语法格式如下:
error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool
其中需要注意的是:
$message
表示需要记录的错误信息;$destination
表示目标,也就是错误消息被发送到的目的地。它的含义描述于以上,由 $message_type
参数所决定;$extra_headers
表示额外的头。当 $message_type
设置为 1 的时候使用。 该信息类型使用了 mail() 的同一个内置函数。
$message_type表示
设置错误应该发送到何处。可能的信息类型有以下几个:
0
:(默认值)将 $message
发送到 PHP 的系统日志,使用操作系统的日志机制或者一个文件,取决于配置文件中 error_log 设置了什么;
1
:将 $message
发送到参数 $destination 设置的邮件地址。 第四个参数 $extra_headers 只有在这个类型里才会被用到;(2已经被弃用了)
3
:$message
被发送到位置为 $destination 的文件里。字符 $message 不会默认被当做新的一行;
4
:将 $message
log_errors
를 활성화하면 프로그램의 오류 보고서를 오류 로그에 작성할 수 있습니다. syslog
, 즉 시스템 로그로 보낼 수도 있습니다. 다음으로 이러한 오류 처리를 구현하는 방법을 살펴보겠습니다. php.ini
의 구성 지침에 어떤 변경이 필요합니까? <strong> log_errors = On</strong>
;로그 문 기록 위치 결정🎜🎜<strong>log_errors_max_len = 1024</strong>
;최대 길이 설정 각 로그 항목 🎜🎜<strong>error_reporting = E_ALL</strong>
;발생하는 모든 오류는 PHP🎜🎜<strong>display_errors에 보고됩니다. = 꺼짐< /strong>
;이전 명령에 정의된 규칙을 충족하는 모든 오류 보고서를 표시하지 않음🎜🎜<strong>error_log = /usr/ local/error.log </strong>
;생성된 오류 보고서가 기록되는 로그 파일의 위치를 지정합니다🎜🎜🎜🎜위 방법으로 php.ini 파일을 수정한 후 설정 성공 후 실행 시 PHP 스크립트 파일을 실행하면 오류 보고서가 브라우저에 표시됩니다. 이때 오류 보고서는 우리가 설정한 대상 파일인 오류 로그에 표시됩니다. error_reporting
으로 정의된 오류가 기록될 수 있으며, 오류 정보는 error_log()를 통해 서버에 기록될 수 있다는 점에 유의하세요.
함수는 오류 로그 또는 이 대상 파일에 있습니다. error_log()
함수의 구문 형식은 다음과 같습니다.<?php $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); if (!$link) { error_log('Mysql 数据库连接失败!',0); exit(); } ?>
$ message
기록해야 할 오류 정보를 나타냅니다. $destination
은 오류 메시지가 전송되는 대상을 나타냅니다. 그 의미는 위에 설명되어 있으며 $message_type
매개변수에 의해 결정됩니다. $extra_headers
는 추가 헤더를 나타냅니다. $message_type
이 1로 설정된 경우 사용됩니다. 이 메시지 유형은 mail()의 동일한 내장 기능을 사용합니다. 🎜🎜$message_type은 설정 오류가 전송되어야 하는 위치를
나타냅니다. 가능한 메시지 유형은 다음과 같습니다: 🎜0
: (기본값)은 $message
code>입니다. PHP로 전송된 시스템 로그는 구성 파일에 설정된 error_log에 따라 운영 체제의 로깅 메커니즘이나 파일을 사용합니다. 🎜🎜1
: $message </ code> $destination 매개변수에 설정된 이메일 주소로 전송합니다. 네 번째 매개변수 $extra_headers는 이 유형에서만 사용됩니다. (2는 더 이상 사용되지 않습니다.) 🎜🎜<li>🎜<code>3
: $message
는 $에 있는 파일로 전송됩니다. 목적지. $message 문자는 기본적으로 새 줄로 처리되지 않습니다. 🎜🎜4
: $message
를 SAPI 로그 처리기에 직접 보냅니다. 🎜🎜🎜🎜 다음으로 MySQL 데이터베이스에 로그인하는 경우를 예로 들어보겠습니다. 로그인에 실패하면 오류 정보가 기록됩니다. 🎜<?php if(!Ora_Logon($username, $password)){ error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中 } if(!($foo=allocate_new_foo()){ error_log("不行!", 1, ". mydomain.com"); //发送到管理员邮箱中 } error_log("不行!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中 error_log("不行!", 3, "/usr/local/errors.log"); //发送到指定的文件中 ?>
<?php if(!Ora_Logon($username, $password)){ error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中 } if(!($foo=allocate_new_foo()){ error_log("不行!", 1, ". mydomain.com"); //发送到管理员邮箱中 } error_log("不行!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中 error_log("不行!", 3, "/usr/local/errors.log"); //发送到指定的文件中 ?>
代码运行之后就会在php.ini 配置文件中 error_log
一项所设置的目录中生成对应的错误日志文件。接下来我们看一下错误信息记录到操作系统的日志里是什么情况。
通过系统日志记录错误报告
上文中我们讲到了将使用目标文件来记录错误报告日志,接下来我们就来看一下将错误信息放到操作系统的日志里面,这是可以实现的,其中不同的操作系统,它们的日志管理也是不一样的,下面我们都是使用常见的windows举例,Windows 上错误将发送到事件日志里,可以通过事件查看器来查看。
通过什么样的方法才能够在操作系统的日志里有错误信息呢?这时候我们可以通过php.ini 配置文件中 error_log
,接下来我们看一下应该怎样修改php.ini中的配置文件。
修改error_reporting = E_ALL
用来报告所发生的每个错误;修改display_errors = Off
用来不显示满足上条指令所定义规则的所有错误报告;修改log_errors = On
用于决定日志语句记录的位置;修改log_errors_max_len = 1024
用于设置每个日志项的最大长度;修改error_log = syslog
用于指定产生的错误报告写入操作系统的日志里 。
虽然通过前面介绍的 error_log()
函数,可以向 syslog 中发送定制的消息,想要实现将错误信息放到操作系统的日志里面,我们还需要三个函数的帮助,下面我们就来简单的介绍一下:
<strong>openlog()</strong>
函数
该函数是用来打开连接的,用于向系统中写入日志信息做的准备。并且每个日志的消息中都有它的一个参数是字符串形式的。
<strong>syslog()</strong>
函数
该函数拥有两个参数,它的作用是用来给系统中的日志给一个特定消息,第一个参数就是用来设置这个消息的优先级,第二个参数即使提供字符串,这个字符串就是这个特定的消息。
<strong>closelog()</strong>
函数
该函数就是用来关闭连接的,这个连接就是上文中openlog()
函数打开的。
那么接下来我们通过示例来看一下实际操作吧,示例如下:
<?php openlog("PHP中文网", LOG_PID, LOG_USER); syslog(LOG_WARNING, "向 syslog 中发送定时消息,发送时间:".date("Y/m/d H:i:s")); closelog(); ?>
以windows系统为例,打开“此电脑”右键选择“管理”选项,进入计算机管理界面,找到图示中应用程序的选项,就能够看到我们自己定制的警告信息了。如下所示:
其中我们需要注意的是:
你所使用的Web服务器环境决定了是使用指定文件还是使用syslog记录错误日志。可以控制服务器的话就可以利用解析工具来查看和分析日志,推荐使用syslog 激励错误日志,网站在共享服务器的虚拟主机中运行,推荐使用单独的文本文件记录错误日志了。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
위 내용은 오류 보고서를 기록하기 위한 다양한 방법 사용 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!