您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關PHP中錯誤處理的原理是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
PHP語言開發簡單之處也體現在可以提供豐富的錯誤信息。
修改 php.ini
配置文件, display_errors = On
即開啟錯誤顯示。
違背了程序語言的規則錯誤,稱之為語法錯誤。比如不以分號結束的語句,或函數寫錯時都會出現語法錯誤。語法錯誤PHP會在運行前檢測出來。
下面代碼沒有以分號結束,將報語法錯誤
<?php echo 'houdunren'
錯誤內容如下
( ! ) Parse error: syntax error, unexpected end of file, expecting ',' or ';' in C:\wamp64\www\php\index.php on line 3
經過語法錯誤檢測后,將開始運行PHP代碼,在此發生的錯誤為運行時錯誤。
以下代碼因為加載不存在文件,所以會發生運行時錯誤。
<?php require 'houdunren';
錯誤內容如下
( ! ) Warning: require(houdunren): failed to open stream: No such file or directory in C:\wamp64\www\php\index.php on line 2
常見運行錯誤如下:
加載不存在文件
連接數據庫失敗
遠程請求失敗
函數或類不存在
如果有用戶數據參與的腳本,需要對數據進行校驗。
邏輯錯誤是指軟件開發工程師在業務邏輯開發中造成錯誤。
下面展示一個工程師分析不到位,造成的邏輯錯誤示例。
for ($i = 0; $i < 5; $i--) { echo $i; }
值常量描述1E_ERROR致命的運行時錯誤。這類錯誤一般是不可恢復的情況,例如內存分配導致的問題。后果是導致腳本終止不再繼續運行2E_WARNING運行時警告 (非致命錯誤)。僅給出提示信息,但是腳本不會終止運行。8E_NOTICE運行時通知。表示腳本遇到可能會表現為錯誤的情況。64E_COMPILE_ERROR致命編譯時錯誤。類似 E_ERROR2048E_STRICT啟用 PHP 對代碼的修改建議,以確保代碼具有最佳的互操作性和向前兼容性。8192E_DEPRECATED運行時通知。啟用后將會對在未來版本中可能無法正常工作的代碼給出警告。8191E_ALL所有錯誤和警告,除級別 E_STRICT 以外。
關閉警告與致命錯誤
error_reporting(~E_WARNING & ~E_COMPILE_ERROR); require('a');
顯示除通知外的所有錯誤
error_reporting(E_ALL & ~E_NOTICE); echo $houdunren;
關閉錯誤顯示
error_reporting(0);
通過自定義錯誤與日志處理引擎,讓錯誤處理個性化。同時有些錯誤是在用戶訪問發生的,通過日志可以更全面檢測網站運行狀態。
<?php namespace Core; class Error { # debug 開啟狀態 protected $debug; public function __construct($debug = true) { $this->debug = $debug; } public function bootstrap() { error_reporting(0); # 自定義錯誤處理 set_error_handler([$this, 'error'], E_ALL | E_STRICT); } public function error($errno, $error, $file, $line) { $msg = $error . "($errno)" . $file . " ($line)."; switch ($errno) { case E_USER_ERROR: case E_USER_NOTICE: break; case E_NOTICE: # 開啟debug時顯示提示消息 if ($this->debug) echo $msg; break; default: if ($this->debug) { include 'debug.php'; } else { $file = 'logs/' . date('Y_m_d') . '.log'; # 記錄錯誤日志到文件 error_log(date("[ c ]") . $msg . PHP_EOL, 3, $file, null); } die; } } } (new Error(false))->bootstrap(); include('houdunren.com');
錯誤顯示頁面
debug.php用于顯示開啟debug時的錯誤顯示頁面。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container mt-3"> <div class="card"> <div class="card-header"> <?php echo 'File:' . $file . ' Line:' . $line; ?> </div> <div class="card-body p-0"> <ul class="list-group list-group-flush"> <?php foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $id => $f) : ?> <li class="list-group-item"> <?php echo "#$id " . $f['file'] . "({$f['line']})<br/>"; ?> </li> <?php endforeach; ?> </ul> </div> </div> </div> </body> </html>
關于PHP中錯誤處理的原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。