오류 보고서를 기록하기 위한 다양한 방법 사용 요약

WBOY
풀어 주다: 2023-04-10 19:06:01
원래의
3621명이 탐색했습니다.

이전 글에서는 "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

    사용하는 모든 프로젝트에서는 필연적으로 오류가 발생합니다. 일부 오류 보고서는 개발자에게 유용합니다. 이때 별도의 텍스트 파일을 통해 오류 보고서를 기록할 수 있습니다. 이를 통해 개발자는 시스템에 문제가 있는지 보다 쉽게 ​​확인할 수 있습니다. 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에 보고됩니다. = 꺼짐< /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(&#39;Mysql 数据库连接失败!&#39;,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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿