主要内容:
- PHP錯誤類型
- 異常的産生
- 錯誤日志
- 日志資訊記錄到作業系統日志
- 異常處理
- 擴充異常處理類
- 文法錯誤
- 執行時錯誤
- 邏輯錯誤
如果安裝了xampp之後,在php.ini中可以設定錯誤報告,配置檔案路徑:C:\xampp\php

可以使用error_reporting(0)關閉錯誤提示,使用error_reporting(E_ALL)報告所有錯誤
在ini檔案中使用;分号注釋
使用指定檔案記錄錯誤報告日志
在開發的産品投入使用後,通常會把所有的錯誤提示都關閉,因為這些提示會影響消費者對産品的體驗,而且曝露太多資訊容易被黑客攻擊。
錯誤資訊可以儲存到單獨的文本(日志檔案)中而不要顯示在浏覽器中。
預設情況都是配置好的,在程式中可以使用error_log($msg)來自定義錯誤資訊
error.php
<?php
echo "ssdsds";
error_log("這是一段自定義的報錯日志資訊");
?>
打開檔案
[06-Aug-2018 07:24:24 Europe/Berlin] 這是一段自定義的報錯日志資訊
[06-Aug-2018 07:24:50 Europe/Berlin] 這是一段自定義的報錯日志資訊
打開php.ini配置檔案
報告PHP所有錯誤
設定PHP報錯日志位址:
日志資訊記錄到作業系統日志
常用方法
- openlog($msg,$option,$facility)打開日志連接配接,比如openlog("php",LOG_PID,LOG_USER)
- syslog($priority,$msg)生成日志消息,比如syslog(LOG_WARNING,"向syslog中發送自定義資訊。。。")
- closelog()關閉日志連接配接
syslog.php
<?php
openlog("PHP5",LOG_PID,LOG_USER);
syslog(LOG_WARNING,"向syslog發送自定義資訊");
closelog();
?>
自定的資訊都被記錄都愛系統日志中了,可以在計算機》管理》事件檢視器》windows日志》應用程式》點選警告,即生成的資訊。
異常處理是一種可擴充、易維護的錯誤處理統一機制。
異常處理的實作
exception.php
<?php
try{
$error="這是異常的提示資訊";
throw new Exception($error);
echo "這裡不會被執行";
}catch(Exception $e){
echo "錯誤資訊:".$e->getMessage()."<br/>";;
}
echo "程式繼續向下執行";
?>
輸出
錯誤資訊:這是異常的提示資訊
程式繼續向下執行
異常必須手動抛出,關鍵字是throw,比如 ,throw new Exception();,注意,在異常被處理後,程式會繼續向下執行。
Exception類是所有異常的基類,可以通過繼承來擴充它。
Exception.php
<?php
//異常類
class Exception{
protected $message='Unknow exception';
protected $code=0;
protected $file;
protected $line;
//構造方法
public function __construct($message=null,$code=0,$previous=null){};
public function __toString();//可重載,用于傳回可輸出的字元串
final public function getMessage();//傳回異常資訊
final public function getCode();//傳回異常代碼
final public function getFile();//傳回發生異常的檔案名
final public function getLine();//傳回發生異常的代碼行号
final public function getTrace();//數組形式傳回異常傳遞的線路
final public function getPrevious();//傳回格式化異常
final public function getTraceAsString();//傳回格式化字元串的getTrace資訊
}
?>
現在我們定義自己的異常類
myException.php
<?php
//異常類
class cakeException extends Exception{
public function __toString(){
return "這個蛋糕過期了<br/>";
}
}
//異常類
class pearException extends Exception{
public function __toString(){
return "這個梨子爛了<br/>";
}
}
//異常類
class appleException extends Exception{
public function __toString(){
return "這個蘋果壞了<br/>";
}
}
try{
throw new cakeException();
}catch(Exception $e){
echo $e;
}
try{
throw new appleException();
}catch(Exception $e){
echo $e;
}
try{
throw new pearException();
}catch(Exception $e){
echo $e;
}
?>
這個蛋糕過期了
這個蘋果壞了
這個梨子爛了
上面都是直接抛出異常,在應用中,我們通過判斷來抛出異常
demo.php
<?php
try{
$a=10;
if(isset($b)){
echo "程式正常執行";
}else{
throw new Exception();
}
}catch(Exception $e){
echo "錯誤代碼所在路徑:".$e->getFile()."<br/>";
echo "錯誤代碼所在行号:".$e->getLine()."<br/>";
}
echo "<br/>程式執行完畢<br/>";
?>
錯誤代碼所在路徑:C:\xampp\htdocs\demo.php
錯誤代碼所在行号:8
程式執行完畢
ok,關于異常處理就到這裡了。