詳解PHP錯(cuò)誤日志的獲取方法
在PHP中錯(cuò)誤日志的獲取方法有很多種,下面我給大家簡(jiǎn)單介紹下遇到此類問(wèn)題如何解決,下面通過(guò)代碼給大家展示下,希望能夠幫助到大家。
<?php
error_reporting (0);
register_shutdown_function($err = 'my_error_handler') OR set_error_handler($err,E_ALL); // 同時(shí)注冊(cè)兩個(gè)函數(shù).
// 函數(shù)參數(shù)錯(cuò)誤
$original = unserialize ( array(423142,2134234));
// 不可對(duì)0除
echo 1/0;
// 不存在的數(shù)組索引
echo $_GET['aa'];
// 不存在的常量
PHP_E;
// 不存在的變量
echo $var;
// 函數(shù)參數(shù)錯(cuò)誤
strlen(array(2434));
// 函數(shù)參數(shù)錯(cuò)誤
md5(array(1));
// 用戶自定義錯(cuò)誤
trigger_error('safdds',E_USER_NOTICE);
// 不存在的函數(shù) php中斷
// tes();
// 不存在的方法 php中斷
$ts = new afsd();
function my_error_handler($errno=0 ,$errstr=0 , $errfile=0 ,$errline=0){
if($errno && $errfile){
if(true){
$earr = array();
$earr['type'] = $errno;
$earr['message'] = $errstr;
$earr['file'] = $errfile;
$earr['line'] = $errline;
}
}else{
$earr = error_get_last();
}
echo '<pre>';
print_r($earr);
return array();
}
對(duì)于php錯(cuò)誤, 我們一定要認(rèn)識(shí)清楚, 類型分幾種, 什么時(shí)候觸發(fā), 返回值是什么.
如果不區(qū)分警告, 錯(cuò)誤, 建議,提示等細(xì)類型種類, 那我們可以理解php錯(cuò)誤類型共有兩種:
一種是強(qiáng)制中斷程序錯(cuò)誤. 如錯(cuò)誤, 方法不存在等. 內(nèi)存不足, 超時(shí)
一種是非中斷式錯(cuò)誤. 如警告, 提示這些
其中獲取中斷程序錯(cuò)誤需要使用register_shutdown_function函數(shù), 注冊(cè)一個(gè)內(nèi)存函數(shù), 然后里面取得錯(cuò)誤信息, 這種方法僅能獲取到首次的錯(cuò)誤行, 如多個(gè)不存在的函數(shù)時(shí), 它只能獲取到首次的那個(gè)錯(cuò)誤. 這其實(shí)也有好處, 你修復(fù)一個(gè), 它就會(huì)移至下一個(gè).
非中斷式錯(cuò)誤, 如果用:register_shutdown_function, 那會(huì)變得異常難操作, 僅僅能獲取首次的提示或者警告, 這時(shí)我們需要set_error_handler, 每一次觸有error level constants, 都會(huì)調(diào)用錯(cuò)誤函數(shù)一次, 也就可以在里面獲取錯(cuò)誤日志. 不過(guò)此函數(shù)會(huì)承接 error_get_last 函數(shù), 所以你會(huì)發(fā)現(xiàn)error_get_last返回為空, 全部由參數(shù)傳入了.
兩個(gè)函數(shù)一起運(yùn)用, 即可獲取到程序的99%的錯(cuò)誤, 這對(duì)于php程序來(lái)說(shuō), 算是雪中送打火機(jī)了.
試試運(yùn)行上面的示例吧.
通過(guò)代碼和文字相結(jié)合對(duì)PHP中錯(cuò)誤日志的獲取方法的整理,希望對(duì)大家在今后的工作中遇到此類問(wèn)題有所幫助。
- PHP配置把錯(cuò)誤日志以郵件方式發(fā)送方法(Windows系統(tǒng))
- PHP.ini中配置屏蔽錯(cuò)誤信息顯示和保存錯(cuò)誤日志的例子
- 實(shí)現(xiàn)Nginx中使用PHP-FPM時(shí)記錄PHP錯(cuò)誤日志的配置方法
- PHP中把錯(cuò)誤日志保存在系統(tǒng)日志中(Windows系統(tǒng))
- 淺談php自定義錯(cuò)誤日志
- 記錄PHP錯(cuò)誤日志 display_errors與log_errors的區(qū)別
- 無(wú)法在發(fā)生錯(cuò)誤時(shí)創(chuàng)建會(huì)話,請(qǐng)檢查 PHP 或網(wǎng)站服務(wù)器日志,并正確配置 PHP 安裝(win+linux)
- 無(wú)法在發(fā)生錯(cuò)誤時(shí)創(chuàng)建會(huì)話,請(qǐng)檢查 PHP 或網(wǎng)站服務(wù)器日志,并正確配置 PHP 安裝最快的解決辦法
- 詳解PHP的Yii框架中日志的相關(guān)配置及使用
- nginx php-fpm中啟用慢日志配置(用于檢測(cè)執(zhí)行較慢的PHP腳本)
- php錯(cuò)誤日志簡(jiǎn)單配置方法
相關(guān)文章
php實(shí)現(xiàn)轉(zhuǎn)換ubb代碼的方法
這篇文章主要介紹了php實(shí)現(xiàn)轉(zhuǎn)換ubb代碼的方法,涉及php正則替換的使用技巧,需要的朋友可以參考下2015-06-06
Docker 安裝 PHP并與Nginx的部署實(shí)例講解
這篇文章主要介紹了Docker 安裝 PHP并與Nginx的部署實(shí)例講解,文中圖文操作步驟講解的很清楚,有感興趣的同學(xué)可以研究下2021-02-02
PHP封裝的mysqli數(shù)據(jù)庫(kù)操作類示例
這篇文章主要介紹了PHP封裝的mysqli數(shù)據(jù)庫(kù)操作類,涉及php針對(duì)mysqli數(shù)據(jù)庫(kù)的連接、增刪改查、分頁(yè)、排序等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
PHP return語(yǔ)句另類用法不止是在函數(shù)中
一直以為,return只能出現(xiàn)在函數(shù)中,直到看了bbPress的代碼,很是吃驚,大家看看就知道了2014-09-09
jquery+php實(shí)現(xiàn)導(dǎo)出datatables插件數(shù)據(jù)到excel的方法
這篇文章主要介紹了jquery+php實(shí)現(xiàn)導(dǎo)出datatables插件數(shù)據(jù)到excel的方法,實(shí)例分析了jquery插件datatables的使用方法與php導(dǎo)出datatables數(shù)據(jù)到Excel的技巧,需要的朋友可以參考下2015-07-07
微信access_token的獲取開(kāi)發(fā)示例
在微信公眾平臺(tái)接口開(kāi)發(fā)中,Access Token占據(jù)了一個(gè)很重要的地位,相當(dāng)于進(jìn)入各種接口的鑰匙,拿到這個(gè)鑰匙才有調(diào)用其他各種特殊接口的權(quán)限。2015-04-04
PHP自定義函數(shù)判斷是否為Get、Post及Ajax提交的方法
這篇文章主要介紹了PHP自定義函數(shù)判斷是否為Get、Post及Ajax提交的方法,涉及php服務(wù)器預(yù)定義變量$_SERVER及字符串相關(guān)操作技巧,需要的朋友可以參考下2017-07-07

