首頁 >後端開發 >PHP問題 >php怎麼捕獲致命錯誤

php怎麼捕獲致命錯誤

王林
王林原創
2020-08-06 14:44:063829瀏覽

php捕捉致命錯誤的方法:可以利用register_shutdown_function()函數來捕捉致命錯誤。 register_shutdown_function()函數表示PHP在程式結束時觸發某個函數行為。

php怎麼捕獲致命錯誤

利用register_shutdown_function()函數來捕捉致命錯誤,該函數表示 PHP 在程式結束時觸發某個函數行為。

(推薦教學:php圖文教學

語法:

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

註冊一個callback ,它會在腳本執行完成或exit()後被調用。

參數:

  • callback:待註冊的中止回呼

  • parameter:可以透過傳入額外的參數來將參數傳給中止函數

程式結束有四種情況:

  • php程式碼執行過程中發生錯誤

  • php程式碼順利執行成功

  • php程式碼運行逾時

  • 頁面被使用者強制停止

(影片教學推薦:程式設計入門

範例:

我們自訂一個行為:

<?php
/**
 * Created by PhpStorm.
 * User: Xavier
 * Date: 2018/6/3
 * Time: 12:16
 */
class RegisterShutDownFunction
{
    /**
     * @author Xavier
     * @desc php 程序运行结束时候需要运行的函数
     */
    public static function register()
    {
        if ($error = error_get_last()) {
            // $filename 必须是一个绝对路径
            if (!defined(&#39;REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME&#39;)) {
                $filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . &#39;register_shutdown_function.log&#39;;
            } else {
                $filename = REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME;
            }
            $message = &#39;时间 : &#39; . date(&#39;Y-m-d H:i:s&#39;) . PHP_EOL;
            $message .= &#39;文件 : &#39; . $error[&#39;file&#39;] . PHP_EOL;
            $message .= &#39;行数 : &#39; . $error[&#39;line&#39;] . PHP_EOL;
            $message .= &#39;错误 : &#39; . $error[&#39;message&#39;] . PHP_EOL;
            $message .= &#39;类型 : &#39; . $error[&#39;type&#39;] . PHP_EOL . PHP_EOL;
            file_put_contents($filename, $message, FILE_APPEND);
        }
    }
}

應用程式:

<?php
/**
 * Created by PhpStorm.
 * User: Xavier
 * Date: 2018/6/3
 * Time: 12:27
 */
 // 定义一个常量来记录程序停止后,出现错误的 LOG 日志文件
define(&#39;REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME&#39;, dirname(__FILE__) . DIRECTORY_SEPARATOR . &#39;11.log&#39;);
// 包含异常处理的类文件
include &#39;lib/RegisterShutDownFunction.php&#39;;
$registerShutDownFunction = new RegisterShutDownFunction();
// register_shutdown_function 函数必须在所有的程序执行之间注册
register_shutdown_function(array($registerShutDownFunction, &#39;register&#39;));

// 注册成功之后调用一个不存在的方法 aa();
aa();

錯誤日誌:

时间 : 2018-06-03 04:56:02
文件 : /Users/x/www/php/exception/2.php
行数 : 17
错误 : Uncaught Error: Call to undefined function aa() in /Users/x/www/php/exception/2.php:17
Stack trace:
#0 {main}
  thrown
类型 : 1

以上是php怎麼捕獲致命錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn