set_error_handler() 함수는 사용자 정의 오류 처리 함수를 설정합니다. 이 함수는 런타임 중에 사용자 고유의 오류 처리 방법을 만드는 데 사용됩니다. 이 함수는 이전 오류 처리기를 반환하거나, 실패할 경우 null을 반환합니다. set_error_handler() 함수는 사용자 정의 오류 처리 함수를 설정합니다. 이 함수는 런타임 중에 사용자 고유의 오류 처리 방법을 만드는 데 사용됩니다. 이 함수는 이전 오류 처리기를 반환하거나 실패 시 null을 반환합니다.
아래의 몇 가지 예를 살펴보세요.set_error_handler()
PHP는 4.1.0부터 사용자 정의 오류 처리 핸들을 위해 set_error_handler() 함수를 제공했지만 이를 아는 스크립트 작성자는 거의 없습니다. set_error_handler 함수는 오류 경로가 유출되는 것을 방지할 수 있으며, 물론 다른 기능도 있습니다.
1. 오류를 차단하는 데 사용할 수 있습니다. 오류가 발생하면 일부 정보가 사용자에게 노출되며, 이는 해커가 웹사이트를 공격하는 도구가 될 가능성이 매우 높습니다. 둘째, 사용자가 자신의 레벨이 매우 낮다고 느끼게 만듭니다.
2. 오류 정보를 적어두고 제작 환경의 문제점을 적시에 발견할 수 있습니다.
3. 오류가 발생하면 더 나은 사용자 경험을 제공하기 위해 미리 정의된 오류 페이지로 이동할 수 있습니다.
4. 때로는 프로덕션 환경에서 디버깅해야 하지만 이를 사용하는 사용자에게 영향을 주고 싶지 않은 경우도 있습니다.
5. . . .
view sourceprint?1 string set_error_handler ( callback error_handler [, int error_types])
()을 사용하여 표시되는 오류 메시지에는 오류 메시지, 절대 주소의 세 부분이 포함됩니다. 오류 파일 및 오류가 나타나는 줄 수입니다. 실제로 또 다른 유형의 오류가 있습니다. 배열( [유형] => 1 [메시지] => 정의되지 않은 메소드 호출 SomeClass::somemedthod() [파일] => /home/zhangy/www/aaaa/stasdf.php [line] => 67 ), 페이지의 절대 경로를 다른 사람에게 노출하지 않는 것이 가장 좋습니다. 그렇지 않으면 일부 사람들에게 불평할 기회를 주기 때문에 많은 사람들이 ini_set("display_errors",0); 을 사용하여 직접 차단할 것입니다. 오류 메시지. 정보를 읽고 싶다면 어떻게 해야 할까요? 확인할 때마다 코드를 변경해야 하나요, 아니면 아파치 구성을 변경하고 다시 시작해야 하나요?
사용 방법은 다음과 같습니다. 함수 Register_shutdown _function도 이 질문을 해결할 수 있습니다.
개인적으로는 오류 함수를 직접 정의하면 적어도 세 가지 장점이 있다고 생각합니다.
1. 파일의 절대 경로가 표시되지 않아 더욱 안전합니다.
2. 오류 메시지가 나타나더라도 사용자가 치명적인 오류를 볼 수 없도록 오류 메시지를 처리할 수 있습니다. 사용자 경험이 좋아야 합니다
3. 프로젝트가 시작된 후에도 사용자가 문제를 해결하도록 도와야 하는 경우가 있습니다. 이때 코드를 수정하는 것은 불가피하지만, 허용하지 않고 오류 메시지를 보고해야 합니다. 사용자가 볼 때, set_error_handler와 같은 함수를 사용하는 것은 매우 멋지다.
작은 테스트를 했습니다
<?php error_reporting(0); register_shutdown_function('error_alert'); function error_alert() { if(is_null($e = error_get_last()) === false) { set_error_handler('errorHandler'); if($e['type'] == 1){ trigger_error("fatal error", E_USER_ERROR); }elseif($e['type'] == 8){ trigger_error("notice", E_USER_NOTICE); }elseif($e['type'] == 2){ trigger_error("warning", E_USER_WARNING); }else{ trigger_error("other", E_USER_OTHER); } }else{ echo "no error"; } } set_error_handler('errorHandler'); function errorHandler($errno, $errstr, $errfile, $errline,$errcontext) { switch ($errno) { case E_USER_ERROR: echo "<b>My ERROR</b> [$errno] $errstr<br />n"; echo " Fatal error on line $errline in file $errfile"; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />n"; break; case E_USER_WARNING: echo "<b>My WARNING</b> [$errno] $errstr<br />n"; echo " warning on line $errline in file $errfile"; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />n"; break; case E_USER_NOTICE: echo "<b>My NOTICE</b> [$errno] $errstr<br />n"; echo " notice on line $errline in file $errfile"; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />n"; break; default: echo "Unknown error type: [$errno] $errstr<br />n"; echo " warning on line $errline in file $errfile"; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />n"; break; } return true; } class SomeClass { public function someMethod() { } } SomeClass::someMedthod(); $a="asdf"; foreach($a as $d){ echo $d; } ?>
//사용자 정의 오류 처리 함수에는 $errno, $errstr, $errfile, $errline 네 가지 입력 변수가 있어야 합니다. 그렇지 않으면 유효하지 않습니다.
function my_error_handler($errno,$errstr,$errfile,$errline) { //如果不是管理员就过滤实际路径 if(!admin) { $errfile=str_replace(getcwd(),"",$errfile); $errstr=str_replace(getcwd(),"",$errstr); } switch($errno) { case E_ERROR: echo "ERROR: [ID $errno] $errstr (Line: $errline of $errfile) n"; echo "程序已经停止运行,请联系管理员。"; //遇到Error级错误时退出脚本 exit; break; case E_WARNING: echo "WARNING: [ID $errno] $errstr (Line: $errline of $errfile) n"; break; default: //不显示Notice级的错误 break; } }
사용자 정의 기능
에 오류 처리를 어떻게 넘겨주나요?// 应用到类 set_error_handler(array(&$this,"appError")); //示例的做法 set_error_handler("my_error_handler");
위의 예에서는 오류 메시지를 끄고 자체 함수를 사용하여 오류를 처리했습니다. 위 페이지에서는 errorHandler를 사용하여 보고된 오류 메시지를 제어하고 처리할 수 있습니다.
좋아요, 요약하면 set_error_handler의 세 가지 사용법은 다음과 같습니다.
Php code
class CallbackClass { function CallbackFunction() { // refers to $this } function StaticFunction() { // doesn't refer to $this } } function NonClassFunction($errno, $errstr, $errfile, $errline) { } // 三种方法如下: set_error_handler(‘NonClassFunction'); // 直接转到一个普通的函数 NonClassFunction set_error_handler(array(‘CallbackClass', ‘StaticFunction')); // 转到 CallbackClass 类下的静方法 StaticFunction $o =& new CallbackClass(); set_error_handler(array($o, ‘CallbackFunction')); // 转到类的构造函数,其实本质上跟下面的第四条一样。 . $o = new CallbackClass(); // The following may also prove useful class CallbackClass { function CallbackClass() { set_error_handler(array(&$this, ‘CallbackFunction')); // the & is important } function CallbackFunction() { // refers to $this } }
시간을 내어 PHP set_error_handler() 함수의 정의와 사용법을 소개하겠습니다
set_error_handler() 함수는 사용자 정의 오류 처리 기능을 설정합니다.
런타임 중 사용자 고유의 오류 처리 방법을 생성하는 데 사용되는 함수입니다.
이 함수는 이전 오류 처리기를 반환하거나, 실패하면 null을 반환합니다.문법
set_error_handler(error_function,error_types)
参数 描述
error_function 必需。规定发生错误时运行的函数。
error_types 可选。规定在哪个错误报告级别会显示用户定义的错误。默认是 "E_ALL"。
提示和注释
提示:如果使用了该函数,会完全绕过标准的 PHP 错误处理函数,如果必要,用户定义的错误处理程序必须终止 (die() ) 脚本。
注释:如果在脚本执行前发生错误,由于在那时自定义程序还没有注册,因此就不会用到这个自定义错误处理程序。
例子
<?php //error handler function function customError($errno, $errstr, $errfile, $errline) { echo "<b>Custom error:</b> [$errno] $errstr<br />"; echo " Error on line $errline in $errfile<br />"; echo "Ending Script"; die(); } //set error handler set_error_handler("customError"); $test=2; //trigger error if ($test>1) { trigger_error("A custom error has been triggered"); } ?>
输出:
Custom error: [1024] A custom error has been triggered
Error on line 19 in C:/webfolder/test.php
Ending Script
위 내용은 PHP의 set error handler() 함수 사용법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!