>백엔드 개발 >PHP 문제 >PHP 오류를 기록하는 방법

PHP 오류를 기록하는 방법

coldplay.xixi
coldplay.xixi원래의
2020-08-14 15:39:103575검색

PHP 오류 로그를 기록하는 방법: 먼저 PHP 구성 파일을 설정한 다음 지정된 파일을 사용하여 오류 보고서 로그를 기록합니다. 마지막으로 오류 정보가 운영 체제 로그에 기록됩니다.

PHP 오류를 기록하는 방법

PHP 오류 로그 기록 방법:

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

자신이 지정한 파일을 사용하여 오류 로그를 기록하는 경우 반드시 저장하세요. 공격을 받을 가능성을 줄이기 위해 루트 디렉터리 외부의 문서에 이 파일을 저장합니다.

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

관련 학습 권장 사항: php 프로그래밍(동영상)

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

  • error_reporting = E_ALL ; 발생하는 모든 오류는 PHP에 보고됩니다.

  • display_errors = Off ;이전 명령에 정의된 규칙을 충족하는 모든 오류 보고서를 표시하지 않음

  • log_errors = On ;로그 문 기록 위치 결정

  • log_errors_max_len = 1024 ;최대 길이 설정 각 로그 항목


  • error_log = /usr/local/error.log 생성된 오류 보고서가 기록되는 로그 파일의 위치를 ​​지정합니다.


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

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

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

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

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

<?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"); //发送到指定的文件中 
?>

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

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


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

  • error_reporting = E_ALL ; 발생하는 모든 오류는 PHP에 보고됩니다.

  • display_errors = Off ; 이전 명령이 충족됨 정의된 규칙에 대한 모든 오류 보고

  • log_errors = On; 로그 문 기록 위치 결정

  • log_errors_max_len = 1024 각 로그 항목의 최대 길이 설정

  • error_log; 생성된 오류 보고서 운영 체제 로그에 쓰기

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

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

define_syslog_variables()

define_syslog_variables() 

在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。 

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

🎜openlog() 🎜

打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数,可以参考官方文档使用。 

syslog()

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

closelog()

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

 

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

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

相关学习推荐:编程视频

위 내용은 PHP 오류를 기록하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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