操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    PHP中返回500錯誤是怎么回事,如何解決?對于PHP開發過程中返回500錯誤的情況還是比較常見的,500錯誤表示服務因未知錯誤導致無法處理請求,這篇我們主要了解為何會報500錯誤及解決方法是什么?

    本文操作環境:系統、PHP7.1版、Dell G3電腦。

    如何解決php 500錯誤問題?

    PHP與500錯誤

    PHP開發過程中經常會遇到返回500錯誤的情況,而且body體中也沒有任何調試(可用)內容。這個時候你就需要慢慢調試了(打斷點,開調試模式等),但如果是現網,這個錯誤就比較讓人抓狂了,既不好打斷點也不能開調試模式。但既然是錯誤,總是會有處理方法,下面就一步步分析500的成因及處理方案。

    0x01、500錯誤

    500錯誤,也叫 Error(內部服務錯誤),表示服務因未知錯誤導致無法處理請求。在PHP站點中一般是由PHP返回,也就是說,500錯誤一般都是PHP腳本的錯誤。

    php-fpm抓包500

    從上圖中可以看出(Nginx+PHP-FPM架構),在PHP調用一個不存在的類時,腳本發生錯誤并返回500給Nginx(并且將錯誤信息也做了返回,只不過是卸載中)。

    0x02、哪些錯誤異常會導致500

    那么哪類錯誤會導致500錯誤呢,PHP所有的錯誤級別可以在PHP的官方文文檔()中查詢到,而這其中錯誤級別為、、、以及未捕獲的異常等都會導致500錯誤。

    級別錯誤導致的500

    0x03、什么情況下錯誤不會返回500

    上面說了,這個是PHP腳本的錯誤導致的,但是PHP腳本有了錯誤或異常一定會導致500嗎?顯然不是,即使在腳本有致命錯誤的情況下,依舊可以返回200。

    配置選項

    在基于、等的web應用中,默認情況下,如果出現異常信息會被打印到控制臺(/)中。而在基于PHP-FPM架構的PHP中沒有控制臺可以打印,它的和被置為中對應的和。如果將錯誤重定向到中,錯誤會直接輸出到響應中,并且狀態碼也會置為200。這個也是選項所實現的能力。

    選項的配置需要通過來實現,PHP文檔中關于的配置表明該值為字符串類型,實際使用中數字和布爾類型也可以打開或關閉該配置。

    配置

    證書錯誤 導航已阻止 繼續瀏覽_瀏覽器500錯誤原因_易語言超文本瀏覽框腳本錯誤

    控制了PHP腳本發生錯誤時是否顯示錯誤詳情以及是否返回錯誤狀態碼,而項則用來控制哪級別的錯誤可以被直接打印出來。

    的設置項可以通過(E_ALL)或('', E_ALL)來配置,函數參數的詳情可以參考PHP文檔。

    需要注意的是,PHP本身是有錯誤日志的(和兩個配置項目),若發生錯誤,PHP會將改錯誤寫入錯誤日志中,而哪些錯誤需要被寫入是受項的控制的。

    在錯誤級別不匹配的情況下不顯示錯誤詳情

    0x04、現網如何合理處理500

    500錯誤發生已經說明PHP腳本無法正常運行了,這時候能做的只是捕獲異常并記錄異常到日志,以方便日后的調試和現網bug的處理。

    PHP自帶錯誤日志

    PHP本身已經帶了錯誤日志的記錄瀏覽器500錯誤原因,可以在php.ini中將項設置為On,并配合配置項來指定錯誤日志的存放路徑。

    錯誤日志記錄開關

    日志路徑設置

    該錯誤日志的的寫入不受的配置的控制。也就是說不管是否開啟,錯誤都會記錄到日志中。但是卻受配置的控制,如果當前錯誤級別跟中的錯誤級別不匹配的話,錯誤不會寫入日志中。即如果錯誤級別是瀏覽器500錯誤原因,但是設置卻為(),那么日志中不會出現的出錯信息。

    PHP錯誤日志記錄各種類型的錯誤

    錯誤級別不匹配導致的日志不寫入

    捕獲錯誤異常記錄

    PHP提供了、、r、等相關的錯誤處理函數。可以通過函數將捕獲到的錯誤信息寫入指定日志來實現錯誤的記錄。

    函數的使用詳情可以參考,這里提供一個模版:

    $previousHandler = set_exception_handler(function(Exception $ex) use (&$previousHandler) {
    

    易語言超文本瀏覽框腳本錯誤_瀏覽器500錯誤原因_證書錯誤 導航已阻止 繼續瀏覽

    call_user_func('exceptionHandler', $ex, $previousHandler); }); set_error_handler('errorHandler'); register_shutdown_function('fatalErrorHandler'); function exceptionHandler(Exception $ex, $previousHandler) { $info = array( $ex->getFile(), $ex->getLine(), $ex->getCode(), $ex->getMessage() ); // 記錄日志 logPHPError($info); if (isset($previousHandler) && is_callable($previousHandler)) { call_user_func($previousHandler, $ex); } } /** * 框架錯誤處理函數 * @param $errno * @param $errstr

    瀏覽器500錯誤原因_證書錯誤 導航已阻止 繼續瀏覽_易語言超文本瀏覽框腳本錯誤

    * @param $errfile * @param $errline * @return bool */ function errorHandler($errno = 0, $errstr = '', $errfile = '', $errline = 0) { switch ($errno) { case E_WARNING: $errname = 'E_WARNING'; break; case E_NOTICE: $errname = 'E_NOTICE'; break; case E_STRICT: $errname = 'E_STRICT'; break; case E_RECOVERABLE_ERROR: $errname = 'E_RECOVERABLE_ERROR'; break; case E_DEPRECATED: $errname = 'E_DEPRECATED'; break;

    易語言超文本瀏覽框腳本錯誤_瀏覽器500錯誤原因_證書錯誤 導航已阻止 繼續瀏覽

    case E_USER_ERROR: $errname = 'E_USER_ERROR'; break; case E_USER_WARNING: $errname = 'E_USER_WARNING'; break; case E_USER_NOTICE: $errname = 'E_USER_NOTICE'; break; case E_USER_DEPRECATED: $errname = 'E_USER_DEPRECATED'; break; default: restore_error_handler(); return false; } // 記錄日志 $info = array( $errfile, $errline, $errname, $errstr

    證書錯誤 導航已阻止 繼續瀏覽_易語言超文本瀏覽框腳本錯誤_瀏覽器500錯誤原因

    ); logPHPError($info); restore_error_handler(); return false; } /** * Fatal error錯誤處理 */ function fatalErrorHandler() { if (($e = error_get_last()) && $e['type'] === E_ERROR) { $info = array( $e['file'], $e['line'], 'E_ERROR', $e['message'] ); // 記錄日志 logPHPError($info); } }

    0x05 總結

    總結起來,是用于控制向瀏覽器或PHP錯誤日志輸出錯誤信息級別的函數或配置,而則是控制是否向瀏覽器輸出錯誤和告警信息。

    由于PHP的錯誤日志是全局的,而且受到的控制,因此推薦在業務中實現自己的錯誤(異常)捕獲記錄邏輯。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有