php set error handler,php的set_error_handler正确用法
set_error_handler的使用方法如下:
string set_error_handler ( callback error_handler [, int error_types])
現(xiàn)在我們就用自定義的錯(cuò)誤處理把實(shí)際路徑過濾掉。
如:假設(shè)有一個(gè)變量$admin,我們是用來(lái)判斷訪問者是否是管理員的(可以通過IP或者登錄的用戶id來(lái)做這個(gè)判斷)
//admin為管理員的身份判定,true為管理員。
//自定義的錯(cuò)誤處理函數(shù)一定要有這4個(gè)輸入變量$errno,$errstr,$errfile,$errline,否則無(wú)效。
function my_error_handler($errno,$errstr,$errfile,$errline)
{
//如果不是管理員就過濾實(shí)際路徑
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 "程序已經(jīng)停止運(yùn)行,請(qǐng)聯(lián)系管理員。";
//遇到Error級(jí)錯(cuò)誤時(shí)退出腳本
exit;
break;
case E_WARNING:
echo "WARNING: [ID $errno] $errstr (Line: $errline of $errfile) \n";
break;
default:
//不顯示Notice級(jí)的錯(cuò)誤
break;
}
}
這樣就自定義了一個(gè)錯(cuò)誤處理函數(shù),那么怎么把錯(cuò)誤的處理交給這個(gè)自定義函數(shù)呢?
// 應(yīng)用到類
set_error_handler(array(&$this,"appError"));
so easy,這樣,就可以很好地解決安全和調(diào)試方便的矛盾了。而且你還可以花點(diǎn)心思,使錯(cuò)誤提示更加美觀以配合網(wǎng)站的風(fēng)格。
原作者給出了兩點(diǎn)需要注意的地方,我也放出來(lái)吧,希望引起廣大同胞們的注意:
E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、 E_COMPILE_ERROR、E_COMPILE_WARNING是不會(huì)被這個(gè)句柄處理的,也就是會(huì)用最原始的方式顯示出來(lái)。不過出現(xiàn)這些錯(cuò)誤都是編譯或PHP內(nèi)核出錯(cuò),在通常情況下不會(huì)發(fā)生。
使用set_error_handler()后,error_reporting ()將會(huì)失效。也就是所有的錯(cuò)誤(除上述的錯(cuò)誤)都會(huì)交給自定義的函數(shù)處理。
最后,原作者又給出了一個(gè)示例
//先定義一個(gè)函數(shù),也可以定義在其他的文件中,再用require()調(diào)用
function myErrorHandler($errno, $errstr, $errfile, $errline)用HQL進(jìn)行實(shí)體查詢
{
//為了安全起見,不暴露出真實(shí)物理路徑,下面兩行過濾實(shí)際路徑
$errfile=str_replace(getcwd(),"",$errfile);
$errstr=str_replace(getcwd(),"",$errstr);
switch ($errno) {
case E_USER_ERROR:
echo "My ERROR [$errno] $errstr
\n";
echo "? Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
\n";
echo "Aborting...
\n";
exit(1);
break;
case E_USER_WARNING:
echo "My WARNING [$errno] $errstr
\n";
break;
case E_USER_NOTICE:
echo "My NOTICE [$errno] $errstr
\n";
break;
default:
echo "Unknown error type: [$errno] $errstr
\n";
break;
}
/* Don't execute PHP internal error handler */
return true;
}
//下面開始連接MYSQL服務(wù)器,我們故意指定MYSQL端口為3333,實(shí)際為3306。
$link_id=@mysql_pconnect("localhost:3333","root","password");
set_error_handler(myErrorHandler);
if (!$link_id) {
trigger_error("出錯(cuò)了", E_USER_ERROR);
}
總結(jié)
以上是生活随笔為你收集整理的php set error handler,php的set_error_handler正确用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 滨海国金所怎么升额度
- 下一篇: 理财有哪些风险