>  기사  >  백엔드 개발  >  PHP 오류 검사에 대한 자세한 소개

PHP 오류 검사에 대한 자세한 소개

黄舟
黄舟원래의
2017-10-10 10:13:592213검색

PHP 개발자의 경우 제품을 사용한 후에는 이러한 오류로 인해 공개되는 경로, 데이터베이스 연결, 데이터 테이블 및 기타 정보로 인해 해커의 공격을 피하기 위해 display_errors 옵션을 즉시 꺼야 합니다. 하지만 어떤 제품을 사용하고 나면 필연적으로 오류가 발생하기 마련인데, 개발자에게 유용한 일부 오류 보고서를 기록하는 방법은 무엇일까요? 별도의 텍스트 파일에 오류 보고서를 기록할 수 있습니다. 오류 로그 기록은 개발자나 관리자가 시스템에 문제가 있는지 확인하는 데 도움이 될 수 있습니다. 프로그램의 오류 보고서를 오류 로그에 기록해야 하는 경우 PHP 구성 파일에서 log_errors 구성 지시어를 켜면 됩니다. 오류 보고서는 기본적으로 웹 서버의 로그 파일(예: Apache 서버의 오류 로그 파일 error.log)에 기록됩니다. 물론 오류 로그를 지정된 파일에 기록하거나 시스템 syslog에 보낼 수도 있습니다. 세부 사항은 다음과 같습니다.

1 지정된 파일을 사용하여 오류 보고서 로그를 기록합니다

오류 보고서 로그를 기록하려면 지정된 파일을 사용하십시오. 오류 보고서 로그는 지정된 파일을 사용하여 오류 로그를 기록합니다. 공격받을 가능성을 줄이기 위해 문서 루트 디렉터리 외부에 저장합니다. 그리고 파일은 PHP 스크립트를 실행하는 사용자(웹 서버 프로세스의 소유자)가 작성해야 합니다. Linux 운영 체제에서는 /usr/local/ 디렉터리의 error.log 파일이 오류 로그 파일로 사용되고 웹 서버 프로세스 사용자에게 쓰기 권한이 설정되어 있다고 가정합니다. 그런 다음 PHP 구성 파일에서 error_log 지시문의 값을 오류 로그 파일의 절대 경로로 설정합니다.

php.ini의 구성 지침을 다음과 같이 수정해야 합니다.

1. error_reporting  =  E_ALL                   ;将会向PHP报告发生的每个错误   
2. display_errors = Off                        ;不显示满足上条 指令所定义规则的所有错误报告   
3. log_errors = On                             ;决定日志语句记录的位置   
4. log_errors_max_len = 1024                   ;设置每个日志项的最大长度   
5. error_log = /usr/local/error.log                ;指定产生的 错误报告写入的日志文件位置

PHP 구성 파일을 위와 같이 설정한 후 웹 서버를 다시 시작합니다. 이런 방식으로 PHP 스크립트 파일을 실행할 때 생성된 모든 오류 보고서는 브라우저에 표시되지 않지만 사용자가 지정한 오류 로그 /usr/local/error.log에 기록됩니다. 또한, error_reporting으로 정의된 규칙을 만족하는 모든 오류를 기록할 수 있을 뿐만 아니라, PHP의 error_log() 함수를 사용하여 사용자가 정의한 오류 메시지를 보낼 수도 있습니다.

이 함수의 프로토타입은 다음과 같습니다.

 1. bool error_log ( string message [, int message_type  [, string destination [, string extra_headers]]] )

이 함수는 웹 서버, TCP 서버의 오류 로그 파일 또는 지정된 파일로 오류 정보를 보냅니다. 이 함수는 성공하면 TRUE를, 실패하면 FALSE를 반환합니다. 첫 번째 매개변수 메시지는 필수이며, 이는 전송할 오류 메시지입니다. 이 매개변수만 사용하는 경우 구성 파일 php.ini에 설정된 위치로 메시지가 전송됩니다. 두 번째 매개변수 message_type은 정수 값입니다. 0은 운영 체제의 로그로 보내는 것을 의미하고, 1은 PHP의 Mail() 함수를 사용하여 메시지를 이메일 주소로 보내는 것을 의미합니다. 2 Send는 또한 사용됩니다. 이때 세 번째 매개변수인 Destination은 대상 IP와 Port를 나타냅니다. 3. 해당 정보를 파일 대상에 저장합니다.

오라클 데이터베이스에 로그인하는 문제를 예로 들면, 이 함수의 사용법은 다음과 같습니다.

1. <?php      
2.     if(!Ora_Logon($username, $password)){     
 3.         error_log("Oracle数据库不可用!", 0);        //将错误消息写入到操作系统日志中   
4.     }   
5.     if(!($foo=allocate_new_foo()){   
6.         error_log("出现*烦了!", 1, ". mydomain.com");   //发送到管理员邮箱中   
7.     }  
8.     error_log("搞砸了!",   2,   "localhost:5000");     //发送到本机对应5000端口的服务器中   
9.     error_log("搞砸了!",   3,   "/usr/local/errors.log");  //发送到指定的文件中   
10. ?>

2 오류 정보는 운영 체제의 로그에 기록됩니다

오류. 정보는 운영 체제 로그에 기록됩니다. 오류 정보는 운영 체제 로그에 기록됩니다. 오류 보고서는 운영 체제 로그에도 기록될 수 있지만 로그 관리는 운영 체제마다 약간 다릅니다. 다양한 운영 체제. Linux에서는 오류 설명이 syslog로 전송되고, Windows에서는 오류가 이벤트 로그로 전송됩니다. syslog에 익숙하지 않다면 최소한 시스템 및 애플리케이션 실행과 관련된 메시지를 기록하는 API를 제공하는 UNIX 기반 로깅 도구라는 점은 알아두십시오. Windows 이벤트 로그는 실제로 UNIX syslog와 동일하며 이러한 로그는 일반적으로 이벤트 뷰어를 통해 볼 수 있습니다. 운영 체제 로그에 오류 보고서를 쓰려면 구성 파일에서 error_log 지시문의 값을 syslog로 설정할 수 있습니다.

php.ini에서 수정해야 하는 특정 구성 지침은 다음과 같습니다.

1. error_reporting  =  E_ALL                   ;将会向PHP报告发生的每个错误   
2. display_errors = Off                            ;不显示 满足上条指令所定义规则的所有错误报告   
3. log_errors = On                             ;决定日志语句记录的位置   
4. log_errors_max_len = 1024                   ;设置每个日志项的最大长度   
5. error_log = syslog                          ;指定产生的错误报告写入操作系统的日志里

PHP에서는 일반 오류 출력 외에도 시스템 syslog에 사용자 정의 메시지를 보낼 수도 있습니다. 앞서 소개한 error_log() 함수를 통해 사용자 정의된 메시지를 syslog로 보낼 수도 있지만, PHP는 이 기능을 위해 함께 사용해야 하는 네 가지 전용 함수를 제공합니다.

각각의 소개는 다음과 같습니다.

define_syslog_variables()

이 함수는 openlog(), syslog 및 closelog() 세 가지 함수를 사용하기 전에 호출되어야 합니다. 왜냐하면 이 함수가 호출되면 현재 시스템 환경에 따라 다음 세 가지 함수에 필요한 일부 상수가 초기화되기 때문입니다.

openlog()

현재 시스템의 로거에 대한 연결을 열어 시스템에 로그 메시지를 삽입할 준비를 합니다. 그리고 제공된 첫 번째 문자열 매개변수를 각 로그 메시지에 삽입하세요. 또한 이 함수는 로그 컨텍스트에서 사용될 두 개의 매개변수를 지정해야 합니다. 사용하려면 공식 문서를 참조하세요.

syslog()

该 函数向系统日志中发送一个定制消息。需要两个必选参数,第一个参数通过指定一个常量定制消息的优先级。例如LOG_WARNING表示一般的警 告,LOG_EMERG表示严重地可以预示着系统崩溃的问题,一些其他的表示严重程度的常量可以参考官方文档使用。第二个参数则是向系统日志中发送的定制 消息,需要提供一个消息字符串,也可以是PHP引擎在运行时提供的错误字符串。 

closelog()

该函数在向系统日志中发送完成定制消息以后调用,关闭由openlog()函数打开的日志连接。 

 

如果在配置文件中,已经开启向syslog发送定制消息的指令,就可以使用前面介绍的四个函数发送一个警告消息到系统日志中,并通过系统中的syslog解析工具,查看和分析由PHP程序发送的定制消息,如下所示: 

1.  
2.     define_syslog_variables();   
3.     openlog("PHP5", LOG_PID , LOG_USER);   
4.     syslog(LOG_WARNING, "警告报告向syslog中发送的演示, 警告时间:".date("Y/m/d H:i:s"));  
5.     closelog();   
6. ?>

 以Windows系统为例,通过右击"我的电脑"选择管理选项,然后到系统工具菜单中,选择事件查看器,再找到应用程序选项,就可以看到我们自己定制的警告消息了。上面这段代码将在系统的syslog文件中,生成类似下面的一条信息,是事件的一部分: 

      1. PHP5[3084], 警告报告向syslog中发送的演示, 警告时间:2009/03/26 04:09:11.  

使 用指定的文件还是使用syslog记录错误日志,取决于你所在的Web服务器环境。如果你可以控制Web服务器,使用syslog是最理想的,因为你能利 用syslog的解析工具来查看和分析日志。但如果你的网站在共享服务器的虚拟主机中运行,就只有使用单独的文本文件记录错误日志了。

위 내용은 PHP 오류 검사에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.