溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么捕獲php致命錯(cuò)誤

發(fā)布時(shí)間:2020-08-07 09:33:27 來(lái)源:億速云 閱讀:125 作者:Leah 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)怎么捕獲php致命錯(cuò)誤,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

php捕獲致命錯(cuò)誤的方法:可以利用register_shutdown_function()函數(shù)來(lái)捕獲致命錯(cuò)誤。register_shutdown_function()函數(shù)表示PHP在程序結(jié)束時(shí)觸發(fā)某個(gè)函數(shù)行為。

利用register_shutdown_function()函數(shù)來(lái)捕獲致命錯(cuò)誤,該函數(shù)表示 PHP 在程序結(jié)束時(shí)觸發(fā)某個(gè)函數(shù)行為。

語(yǔ)法:

void register_shutdown_function(callable $callback[, mixed $parameter [, mixed $... ]])

注冊(cè)一個(gè) callback ,它會(huì)在腳本執(zhí)行完成或者 exit() 后被調(diào)用。

參數(shù):

  • callback:待注冊(cè)的中止回調(diào)

  • parameter:可以通過(guò)傳入額外的參數(shù)來(lái)將參數(shù)傳給中止函數(shù)

程序結(jié)束有四種情況:

  • php代碼執(zhí)行過(guò)程中發(fā)生錯(cuò)誤

  • php代碼順利執(zhí)行成功

  • php代碼運(yùn)行超時(shí)

  • 頁(yè)面被用戶強(qiáng)制停止

舉例:

我們自定義一個(gè)行為:

<?php
/**
 * Created by PhpStorm.
 * User: Xavier
 * Date: 2018/6/3
 * Time: 12:16
 */
class RegisterShutDownFunction
{
    /**
     * @author Xavier
     * @desc php 程序運(yùn)行結(jié)束時(shí)候需要運(yùn)行的函數(shù)
     */
    public static function register()
    {
        if ($error = error_get_last()) {
            // $filename 必須是一個(gè)絕對(duì)路徑
            if (!defined('REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME')) {
                $filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'register_shutdown_function.log';
            } else {
                $filename = REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME;
            }
            $message = '時(shí)間 : ' . date('Y-m-d H:i:s') . PHP_EOL;
            $message .= '文件 : ' . $error['file'] . PHP_EOL;
            $message .= '行數(shù) : ' . $error['line'] . PHP_EOL;
            $message .= '錯(cuò)誤 : ' . $error['message'] . PHP_EOL;
            $message .= '類型 : ' . $error['type'] . PHP_EOL . PHP_EOL;
            file_put_contents($filename, $message, FILE_APPEND);
        }
    }
}

應(yīng)用:

<?php
/**
 * Created by PhpStorm.
 * User: Xavier
 * Date: 2018/6/3
 * Time: 12:27
 */
 // 定義一個(gè)常量來(lái)記錄程序停止后,出現(xiàn)錯(cuò)誤的 LOG 日志文件
define('REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME', dirname(__FILE__) . DIRECTORY_SEPARATOR . '11.log');
// 包含異常處理的類文件
include 'lib/RegisterShutDownFunction.php';
$registerShutDownFunction = new RegisterShutDownFunction();
// register_shutdown_function 函數(shù)必須在所有的程序執(zhí)行之間注冊(cè)
register_shutdown_function(array($registerShutDownFunction, 'register'));

// 注冊(cè)成功之后調(diào)用一個(gè)不存在的方法 aa();
aa();

錯(cuò)誤日志:

時(shí)間 : 2018-06-03 04:56:02
文件 : /Users/x/www/php/exception/2.php
行數(shù) : 17
錯(cuò)誤 : Uncaught Error: Call to undefined function aa() in /Users/x/www/php/exception/2.php:17
Stack trace:
#0 {main}
  thrown
類型 : 1

關(guān)于怎么捕獲php致命錯(cuò)誤就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI