標籤:new 比較 page 恢複 color 5.5 root medium 工作
【php技術】PHP錯誤類型和屏蔽方法簡單生活 來源:本站 發表時間:2016-10-30 08:58:12 查看:7 次
一、php的錯誤類型
首先,我們需要知道的是怎麼才能顯示我們的錯誤:
通過在代碼中添加兩行代碼:
1.顯示除E_STRICT外的所有錯誤和警告資訊
error_reporting(E_ALL);
2. 是否把錯誤展示在輸出上
ini_set(‘display_errors‘, ‘On‘);
有了以上兩部操作,我們就可以把我們的錯誤資訊展示在頁面上了。
第二,我們需要知道php有哪些錯誤類型:
根據中文官方文檔,共有16個錯誤層級:
地址:http://php.net/manual/zh/errorfunc.constants.php
在文檔中已經非常清楚的描述錯誤的層級和出錯的原因,這裡我們選擇幾個比較有代表性的錯誤,給大家詳細說明:
1. E_ERROR
致命的執行階段錯誤。這類錯誤一般是不可恢複的情況,例如記憶體配置導致的問題。後果是導致指令碼終止不再繼續運行。頁面上通常會顯示Fatal Error,出現這種錯誤的原因可能為:訪問不存在此函數代碼、伺服器執行時間逾時、調用了不存在的類代碼等等
如:類不存在
$goodsModel = new Goods();
Fatal error: Class ‘Goods‘ not found in D:\web\error.php on line 3
2. E_PARSE
編譯時間文法解析錯誤。解析錯誤僅僅由分析器產生。這種語法錯誤採用專業的IDE就可以很好的避免,諸如phpstorm,zend studio等等。
如:沒有設定變數值
$a = ;
Parse error: syntax error, unexpected ‘;‘ in D:\web\error.php on line 3
3. E_WARNING
運行時警告 (非致命錯誤)。僅給出提示資訊,但是指令碼不會終止運行。
如:
include ‘xxx.php‘;
echo ‘繼續運行‘;
Warning: include(xxx.php): failed to open stream: No such file or directory in D:\web\error.php on line 3
Warning: include(): Failed opening ‘xxx.php‘ for inclusion (include_path=‘.;C:\php\pear‘) in D:\web\error.php on line 3
繼續運行
4. E_NOTICE
運行時通知。表示指令碼遇到可能會表現為錯誤的情況,但是在可以正常啟動並執行指令碼裡面也可能會有類似的通知。這種錯誤的層級稍微低一些。
如:
echo $c;
Notice: Undefined variable: c in D:\web\error.php on line 8
5. E_DEPRECATED
運行時通知。啟用後將會對在未來版本中可能無法正常工作的代碼給出警告。
如:
當我們使用PHP5.5(或更高)時,如果使用mysql_connect(()函數串連資料庫時就會報錯,建議使用更新的MySQL串連方式
$conn = mysql_connect(‘localhost‘,‘root‘,‘admin‘);
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in D:\web\error.php on line 4
還有很多的錯誤類型,大家可以通過文檔瞭解更多。
二、屏蔽方法
1、屏蔽某個函數錯誤資訊
使用@符號,可以屏蔽某個函數錯誤資訊,這是就不會報錯。
如:
$conn = @mysql_connect(‘localhost‘,‘root‘,admin);
2、屏蔽某個類型的錯誤
2.1 在代碼中屏蔽
文法:error_reporting(E_ALL ^ 錯誤常量) 或 error_reporting(E_ALL & ~錯誤常量)
如:
error_reporting(E_ALL ^ E_DEPRECATED);
$conn = mysql_connect(‘localhost‘,‘root‘,‘admin‘);
2.2 在設定檔php.ini中屏蔽
文法:error_reporting = E_ALL & ~錯誤常量
如:
error_reporting = E_ALL & ~ E_DEPRECATED & ~ E_NOTICE
3、屏蔽所有錯誤
方式:
在代碼中error_reporting(0) 或者 修改設定檔error_reporting = 0
但是我們在工作中一般建議不關閉所有報錯,而是通過日誌的方式記錄所有錯誤資訊,不在頁面中展示錯誤資訊。之後我會給大家介紹怎麼捕捉錯誤並記錄日誌。
【php技術】PHP錯誤類型和屏蔽方法