91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中錯誤處理的原理是什么

發布時間:2021-06-22 16:52:27 來源:億速云 閱讀:134 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關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中錯誤處理的原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

贡山| 迭部县| 灌阳县| 棋牌| 宜良县| 扶沟县| 望都县| 双牌县| 洪洞县| 四会市| 饶平县| 曲靖市| 久治县| 松原市| 吕梁市| 霸州市| 定远县| 崇义县| 湘潭县| 湘潭市| 镇江市| 克东县| 津南区| 东丽区| 福海县| 石渠县| 大田县| 佛教| 九龙县| 武义县| 布尔津县| 西和县| 无为县| 隆回县| 西乌| 桐城市| 沽源县| 乳山市| 城固县| 大同县| 岳西县|