php 打印错误 display,php错误display及error_reporting的使用
今日在開發(fā)中,遇到線上服務(wù)器不記錄變量不存在的錯誤日志,那么是怎么回事呢?
于是開始查找 index.php 中的代碼switch?(ENVIRONMENT)?{
case?'development':
error_reporting(-1);
ini_set('display_errors',?0);
break;
case?'testing':
case?'production':
ini_set('display_errors',?0);
if?(version_compare(PHP_VERSION,?'5.3',?'>='))?{
error_reporting(E_ALL?&?~E_NOTICE?&?~E_DEPRECATED?&?~E_STRICT?&?~E_USER_NOTICE?&?~E_USER_DEPRECATED);
}
else?{
error_reporting(E_ALL?&?~E_NOTICE?&?~E_STRICT?&?~E_USER_NOTICE);
}
break;
default:
header('HTTP/1.1?503?Service?Unavailable.',?TRUE,?503);
echo?'The?application?environment?is?not?set?correctly.';
exit(1);?//?EXIT_ERROR
}
線上代碼是 production 生產(chǎn)環(huán)境, 是執(zhí)行:error_reporting(E_ALL?&?~E_NOTICE?&?~E_STRICT?&?~E_USER_NOTICE);
這句話的代碼是什么意思呢?
所有日志,除了了E_NOTICE? E_STRICT? 以及E_USER_NOTICE 這三個錯誤以外的錯誤才提示和記錄,
變量不存在,屬于 Notice 這個層次的
開發(fā)環(huán)境:可以正常記錄,變量不存在
ERROR - 2018-06-12 17:29:58 --> Severity: Notice --> Undefined index: success D:\phpStudy\WWW\jifen\wangyu\app\helpers\funs_helper.php 158
生產(chǎn)環(huán)境:不記錄了
原因就是:error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
打開錯誤:
打開所有的錯誤,全部輸出:這是開發(fā)環(huán)境
ini_set('display_errors',1);
error_reporting(-1);? 報告所有的錯誤
error_reporting(0); //關(guān)閉所有錯誤
error_reporting=E_ALL?& ?~E_NOTICE
意思是報告所有的錯誤,但除了E_NOTICE這一種。這也是最常用的錯誤報告級別,它不會報告注意類(如:使用了未定義的變量)的錯誤。
下面列舉一些錯誤報告級別:
值 ? ? ? ? ?常量 ? ? ? ? ? ? ? ? ? ? 說明
1 ? ? ? ? ??E_ERROR ? ? ? ? ? ? 報告導(dǎo)致腳本終止運行的致命錯誤
2 ? ? ? ? ??E_WARNING ? ? ? 報告運行時的警告類錯誤(腳本不會終止運行)
4 ? ? ? ? ??E_PARSE ? ? ? ? ? ? 報告編譯時的語法解析錯誤
8 ? ? ? ? ??E_NOTICE ? ? ? ? ? 報告通知類錯誤,腳本可能會產(chǎn)生錯誤
32767 ??E_ALL ? ? ? ? ? ? ? ? ?報告所有的可能出現(xiàn)的錯誤(不同的PHP版本,常量E_ALL的值也可能不同)
error_reporting(E_ALL?^?E_NOTICE); ? ?// 除了E_NOTICE之外,報告所有的錯誤
error_reporting(E_ALL & ~E_NOTICE);??// 除了E_NOTICE之外,報告所有的錯誤 這兩種意思一樣
error_reporting(E_ERROR); ? ? ? // 只報告致命錯誤
echo?error_reporting(E_ERROR?|?E_WARNING?|?E_NOTICE); ? // 只報告E_ERROR、E_WARNING 和 E_NOTICE三種錯誤
注意:配置文件php.ini中display_errors的默認值為On,代表顯示錯誤提示,如果設(shè)置為Off,就會關(guān)閉所有的錯誤提示。
可以通過程序動態(tài)去設(shè)置? 錯誤是否開啟和關(guān)閉:ini_set('display_error');
ini_get('display_errors');? 可以獲取當(dāng)前php運行 錯誤報告的狀態(tài)。
特別告知: Notice? 和 Warning 運行出錯的時候,程序不會停止,會繼續(xù)運行。
class?Err{
protected?$debug;
public?function?__construct($debug=true){
$this->debug=$debug;
}
public?function?error(){
error_reporting(0);
set_error_handler([$this,'handle'],E_ALL|E_STRICT);
}
public?function?handle($code,$error,$file,$line){
echo?$error;
print_r($file);
}
}
(new?Err())->error();
echo?$a;
總結(jié)
以上是生活随笔為你收集整理的php 打印错误 display,php错误display及error_reporting的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女子路边买鹅蛋煮后蛋清是粉色 当事人懵了
- 下一篇: php被替代,php 替代被弃用函数的