成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php的異常和處理

CarterLi / 2637人閱讀

摘要:常見錯(cuò)誤處理類型語法錯(cuò)誤環(huán)境錯(cuò)誤邏輯錯(cuò)誤常見錯(cuò)誤級(jí)別最低級(jí)別的錯(cuò)誤不推薦,不建議,使用一些過期函數(shù)的時(shí)候會(huì)出現(xiàn),程序繼續(xù)執(zhí)行通知級(jí)別的錯(cuò)誤使用一些未定義變量常量或者數(shù)組沒有加引號(hào)的時(shí)候會(huì)出現(xiàn),程序繼續(xù)執(zhí)行警告級(jí)別的錯(cuò)誤程序出問題了,需要修改

常見錯(cuò)誤處理類型

語法錯(cuò)誤

環(huán)境錯(cuò)誤

邏輯錯(cuò)誤

常見錯(cuò)誤級(jí)別

Deprecated 最低級(jí)別的錯(cuò)誤

不推薦,不建議,使用一些過期函數(shù)的時(shí)候會(huì)出現(xiàn),程序繼續(xù)執(zhí)行

Notice 通知級(jí)別的錯(cuò)誤

使用一些未定義變量、常量或者數(shù)組key沒有加引號(hào)的時(shí)候會(huì)出現(xiàn),程序繼續(xù)執(zhí)行

Waning 警告級(jí)別的錯(cuò)誤

程序出問題了,需要修改代碼?。?!程序繼續(xù)執(zhí)行

Fatal Error 錯(cuò)誤級(jí)別的錯(cuò)誤

程序直接報(bào)錯(cuò),需要修改代碼?。?!中斷程序執(zhí)行

parse error 語法解析錯(cuò)誤

語法檢查階段報(bào)錯(cuò),需要修改代碼?。?!中斷程序執(zhí)行

E_USER_相關(guān)的錯(cuò)誤

用戶定義的錯(cuò)誤,用戶手動(dòng)拋出錯(cuò)誤,進(jìn)行自定義錯(cuò)誤處理

PHP配置文件和錯(cuò)誤相關(guān)選項(xiàng)

設(shè)置錯(cuò)誤級(jí)別
1、通過修改php.ini文件設(shè)置錯(cuò)誤級(jí)別,靜態(tài)設(shè)置,需要重啟apache
// error_reporting = E_ALL&~E_NOTICE; //顯示所有錯(cuò)誤,除了E_NOTICE級(jí)別
// display_errors = 1; //線下開啟,先上關(guān)閉

2、通過error_reporting()函數(shù)設(shè)置,動(dòng)態(tài)設(shè)置
// error_reporting(E_ALL&~E_NOTICE); //顯示所有錯(cuò)誤,除了E_NOTICE級(jí)別
// error_reporting(0); //屏蔽所有錯(cuò)誤,只會(huì)顯示語法解析錯(cuò)誤
// erorr_reporting(-1); //顯示所有錯(cuò)誤

3、通過ini_set()函數(shù)進(jìn)行運(yùn)行時(shí)設(shè)置,動(dòng)態(tài)設(shè)置
// ini_set("error_reporting",0);
// ini_set("error_reporting",-1);
// ini_set("display_errors",0);

使用triggerr_error進(jìn)行錯(cuò)誤拋出
代碼繼續(xù)執(zhí)行";
記錄錯(cuò)誤

配置php.ini腳本設(shè)置記錄錯(cuò)誤
log_errors = On //是否將產(chǎn)生錯(cuò)誤信息記錄到日志或者error_log中
;error_log = syslog //設(shè)置腳本錯(cuò)誤將記錄到系統(tǒng)日志中
log_errors_max_len = 1024 //設(shè)置錯(cuò)誤報(bào)錯(cuò)最大值,單位字節(jié)
ignore_repeated_errors = Off //是否忽略重復(fù)的錯(cuò)誤信息
ignore_repeated_source = Off //是否忽略重復(fù)錯(cuò)誤消息的來源
track_errors = On //如果開啟,最后一個(gè)錯(cuò)誤將永遠(yuǎn)保存在$php_errormsg中

將錯(cuò)誤記錄到指定的文件中

";

settype($var,"king"); //Warning
echo "
"; test(); //Fatal error

將日志文件保存到系統(tǒng)日志中


將錯(cuò)誤以郵件形式發(fā)送
1、首先需要配置郵件服務(wù)器!
2、去php.ini中配置郵件參數(shù)
3、寫代碼

error_log("當(dāng)前系統(tǒng)被人攻擊!產(chǎn)生錯(cuò)誤!",1,"[email protected]");
error_log函數(shù)使用
error_log($msg); //傳入錯(cuò)誤記錄,需要與error_log配置使用
如何使用Set_error_handler()
錯(cuò)誤代碼:[{$errno}] {$errmsg} 
".PHP_EOL; echo "錯(cuò)誤行號(hào):{$file}文件中的第 {$line}
".PHP_EOL; echo "PHP版本:".PHP_VERSION."(".PHP_OS.")
".PHP_EOL; //注意:如果自定義錯(cuò)誤處理捕獲了,代碼還是會(huì)執(zhí)行,如果不想被執(zhí)行,需要die掉?。?! //die; } //設(shè)置自定義錯(cuò)誤處理 set_error_handler("customer_error"); //輸出一個(gè)未定義變量的警告 echo $test; echo "
"; //原生出錯(cuò) //Notice: Undefined variable: test in D:phpStudyWWWexampleindex.php on line 26 //自定義出錯(cuò) //錯(cuò)誤代碼:[8] Undefined variable: test //錯(cuò)誤行號(hào):D:phpStudyWWWexampleindex.php文件中的第 26 //PHP版本:5.3.29(WINNT) //無法捕獲一個(gè)致命錯(cuò)誤Fatal error,會(huì)切換到原生出錯(cuò) //test(); //手動(dòng)拋出一個(gè)錯(cuò)誤,被自定義的錯(cuò)誤處理捕獲 trigger_error("this is a test of error",E_USER_ERROR); echo "contiune"; echo "
"; //錯(cuò)誤代碼:[256] this is a test of error //錯(cuò)誤行號(hào):D:phpStudyWWWexampleindex.php文件中的第 43 //PHP版本:5.3.29(WINNT) //contiune //取消自定義錯(cuò)誤處理,將會(huì)重新適應(yīng)PHP原生的錯(cuò)誤處理 restore_error_handler(); echo $tt; echo "
"; //Notice: Undefined variable: tt in D:phpStudyWWWexampleindex.php on line 49 //重新掛載自定義錯(cuò)誤處理 //除了NOTICE級(jí)別的交給系統(tǒng)處理,剩下的全部使用customer_error自定義的錯(cuò)誤處理 set_error_handler("customer_error",E_ALL&~E_NOTICE); echo $asc; //E_NOTICE級(jí)別,系統(tǒng)的錯(cuò)誤處理 settype($var,"king"); //E_WARNING級(jí)別,使用自定義的錯(cuò)誤處理 //Notice: Undefined variable: asc in D:phpStudyWWWexampleindex.php on line 65 //錯(cuò)誤代碼:[2] settype() [function.settype]: Invalid type //錯(cuò)誤行號(hào):D:phpStudyWWWexampleindex.php文件中的第 66 //PHP版本:5.3.29(WINNT)
自定義一個(gè)錯(cuò)誤處理器
msg = $msg;
        $this->filename = $filename;
        $this->line = $line;
        $this->vars = $vars;
    }

    public static function deal($errno,$errmsg,$filename,$line,$vars){
        
        $self = new self($errmsg,$filename,$line,$vars);
        switch ($errno) {
            case E_USER_ERROR :
                return $self->dealError();
                break;
            case E_USER_WARNING :
            case E_WARNING :
                return $self->dealWarning();
                break;
            case E_NOTICE :
            case E_USER_NOTICE :
                return $self->dealNotice();
                break;
            default:
                return false;
                break;
        }
    }

    /**
     * 處理致命錯(cuò)誤
     * @return [type] [description]
     */
    public function dealError(){
        ob_start();
        debug_print_backtrace();
        $backtrace = ob_get_flush();
        $errmsg = <<filename}
產(chǎn)生錯(cuò)誤的信息:{$this->msg}
產(chǎn)生錯(cuò)誤的行號(hào):{$this->line}
追蹤信息:{$backtrace}
EOF;
        //發(fā)送郵件的錯(cuò)誤日志
        //error_log($errmsg,1,"[email protected]");
        //記錄到錯(cuò)誤日志
        error_log($errmsg,3,"D:/logs/customer_error.log");
        exit(1);
    }

    /**
     * 處理警告錯(cuò)誤
     * @return [type] [description]
     */
    public function dealWarning(){
        $errmsg = <<filename}
產(chǎn)生警告的信息:{$this->msg}
產(chǎn)生警告的行號(hào):{$this->line}
EOF;
        error_log($errmsg,3,"D:/logs/customer_warning.log");
    }

    /**
     * 處理通知級(jí)別的錯(cuò)誤
     * @return [type] [description]
     */
    public function dealNotice(){
        $date = date("Y-m-d H:i:s",time());
        $errmsg = <<filename}
產(chǎn)生錯(cuò)誤的信息:{$this->msg}
產(chǎn)生錯(cuò)誤的行號(hào):{$this->line}
產(chǎn)生通知的時(shí)間:{$date}
EOF;
        error_log($errmsg,3,"D:/logs/customer_notice.log");
    }
}



//顯示所有錯(cuò)誤
error_reporting(-1);

//設(shè)置自定義錯(cuò)誤,使用傳入類和方法的方式
set_error_handler(array("MyErrorHandler","deal"));

//觸發(fā)NOTICE級(jí)別錯(cuò)誤,會(huì)保存到log日志中
echo $tt;

//手動(dòng)觸發(fā)一個(gè)錯(cuò)誤
trigger_error("手動(dòng)拋出一個(gè)錯(cuò)誤",E_USER_ERROR);

register_shutdown_function()函數(shù)
";
            error_get_last();
            echo "
"; //因?yàn)閞egister_shutdown_function調(diào)用該函數(shù)的時(shí)候,是代碼終止,脫離當(dāng)前PHP上下文環(huán)境了 //所以$filename的路徑要寫決定路徑?。?! file_put_contents("D:logs egister_shutdown_function.log", error_get_last()); die("endScript"); } } } //特別聲明!如果有die或exit在注冊(cè)錯(cuò)誤處理之前,那么將不會(huì)注冊(cè)錯(cuò)誤處理 register_shutdown_function(array("Showdown","endScript")); echo md6();
錯(cuò)誤抑制符
@settype($var,"longjq"); //無變量$var,使用@符號(hào)進(jìn)行抑制錯(cuò)誤輸出
錯(cuò)誤級(jí)別

http://www.w3school.com.cn/php/php_ref_error.asp

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21189.html

相關(guān)文章

  • 淺析php異常與錯(cuò)誤

    摘要:異常與錯(cuò)誤異常是指程序運(yùn)行中不符合預(yù)期情況以及與正常流程不同的狀況。在中主要的錯(cuò)誤等級(jí)如下最低級(jí)別的錯(cuò)誤,表示不推薦不建議。小結(jié)中錯(cuò)誤和異常是兩個(gè)不同的概念,這種設(shè)計(jì)根本上導(dǎo)致了的異常和錯(cuò)誤與其它語言相異。中,異常時(shí)錯(cuò)誤唯一的報(bào)告方式。 異常與錯(cuò)誤 異常是指程序運(yùn)行中不符合預(yù)期情況以及與正常流程不同的狀況。錯(cuò)誤則屬于自身問題,是一種非法語法或者環(huán)境問題導(dǎo)致的、讓編譯器無法通過檢查設(shè)置無...

    Leck1e 評(píng)論0 收藏0
  • PHP基礎(chǔ):異常處理Exception

    摘要:是所有異常的基類。它包含的異常的確是對(duì)象,唯一條件就是必須從類繼承。在語句中使用所謂的是一關(guān)系對(duì)類的名字和異常對(duì)象做檢查。如果異常在任何地方都沒能捕獲,那么會(huì)提供最后的機(jī)會(huì)異常處理函數(shù)。 Exception是所有異常的基類。 Exception { /* 屬性 */ protected string $message ; protected int $code ...

    laoLiueizo 評(píng)論0 收藏0
  • PHP 錯(cuò)誤與異常

    摘要:但異常捕獲后程序可以繼續(xù)執(zhí)行,而真正的錯(cuò)誤出現(xiàn)后程序就必須終止異常可以使用來捕獲捕獲,捕獲之后后續(xù)代碼可以繼續(xù)執(zhí)行而錯(cuò)誤是無法使用捕獲的如果拋出了異常,就必須捕獲它否則程序終止執(zhí)行。 PHP錯(cuò)誤級(jí)別 Parse error > Fatal Error > Waning > Notice > Deprecated Deprecated 最低級(jí)別的錯(cuò)誤(不推薦,不建議)使用一些過期函數(shù)的...

    longmon 評(píng)論0 收藏0
  • 上手并過渡到PHP7(4)——取代fatal errorengine exceptions

    摘要:上手并過渡到取代的泊學(xué)原文鏈接泊學(xué)代碼秀視頻自從以來,的錯(cuò)誤處理幾乎就是一成不變的。在中,這個(gè)尷尬的現(xiàn)狀,終于被徹底改變了。無論是還是傳統(tǒng)的,只要類型不匹配約束的時(shí)候,就會(huì)導(dǎo)致異常。 上手并過渡到PHP7 取代fatal error的engine exceptions 泊學(xué)原文鏈接泊學(xué)代碼秀視頻 自從PHP 4以來,PHP的錯(cuò)誤處理幾乎就是一成不變的。只不過在PHP 5.0里添加了E_...

    mylxsw 評(píng)論0 收藏0
  • PHP框架中日志系統(tǒng)

    摘要:一的幾個(gè)函數(shù)異常捕獲自定義處理函數(shù)注冊(cè)錯(cuò)誤捕獲自定義處理函數(shù)注冊(cè)程序執(zhí)行時(shí)異常終止錯(cuò)誤捕獲處理函數(shù)注冊(cè)這三個(gè)函數(shù)在錯(cuò)誤處理控制中給開發(fā)者提供了很大的自主空間,在日志系統(tǒng)中記錄日志信息有他們的功勞。下面要說的類庫是借鑒了日志系統(tǒng)的設(shè)計(jì)。 引言 接觸過php框架的朋友們可能都知道,日志在項(xiàng)目中的重要作用了,他可以幫助我們定位錯(cuò)誤的位置,讓程序更友好(處理得當(dāng)?shù)脑挷粫?huì)直接拋出一大堆只有程...

    ningwang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<