天天看點

PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類

 主要内容:

  1. PHP錯誤類型
  2. 異常的産生
  3. 錯誤日志
  4. 日志資訊記錄到作業系統日志
  5. 異常處理
  6. 擴充異常處理類

  • 文法錯誤
  • 執行時錯誤
  • 邏輯錯誤

如果安裝了xampp之後,在php.ini中可以設定錯誤報告,配置檔案路徑:C:\xampp\php

PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類
PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類
PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類
PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類

可以使用error_reporting(0)關閉錯誤提示,使用error_reporting(E_ALL)報告所有錯誤

 在ini檔案中使用;分号注釋

使用指定檔案記錄錯誤報告日志

在開發的産品投入使用後,通常會把所有的錯誤提示都關閉,因為這些提示會影響消費者對産品的體驗,而且曝露太多資訊容易被黑客攻擊。

錯誤資訊可以儲存到單獨的文本(日志檔案)中而不要顯示在浏覽器中。

預設情況都是配置好的,在程式中可以使用error_log($msg)來自定義錯誤資訊

error.php

<?php
	echo "ssdsds";
	error_log("這是一段自定義的報錯日志資訊");
?>
      

  

PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類

打開檔案

[06-Aug-2018 07:24:24 Europe/Berlin] 這是一段自定義的報錯日志資訊
[06-Aug-2018 07:24:50 Europe/Berlin] 這是一段自定義的報錯日志資訊
      

打開php.ini配置檔案

PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類

報告PHP所有錯誤

PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類

設定PHP報錯日志位址:

PHP學習5——異常處理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();
?>
      
PHP學習5——異常處理PHP錯誤類型異常的産生錯誤日志 日志資訊記錄到作業系統日志異常處理擴充異常處理類

自定的資訊都被記錄都愛系統日志中了,可以在計算機》管理》事件檢視器》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,關于異常處理就到這裡了。