php的錯誤級別

2022-03-04 17:46:35 字數 4885 閱讀 1762

error_reporting()

用於設定 php 的報錯級別並返回當前級別。(php 4, php 5)

函式能夠在執行時設定 error_reporting 指令。

php 有諸多錯誤級別,使用該函式可以設定在指令碼執行時的級別。

如果沒有設定可選引數 level, error_reporting() 僅會返回當前的錯誤報告級別。

引數level

新的 error_reporting 級別。 可以是乙個位掩碼也可以是乙個已命名的常量。

建議使用已命名的常量,以確保相容將來的版本。 由於錯誤級別的新增、整數取值範圍的增加,

較久的基於整數的錯誤級別不會總是和預期的表現一致。

level 可能的值:

值      常量                       描述

1

1e_error 致命的執行錯誤。錯誤無法恢復,暫停執行指令碼。22

e_warning 執行時警告(非致命性錯誤)。非致命的執行錯誤,指令碼執行不會停止。34

e_parse 編譯時解析錯誤。解析錯誤只由分析器產生。48

e_notice 執行時提醒(這些經常是你**中的bug引起的,也可能是有意的行為造成的。)516

e_core_error php 啟動時初始化過程中的致命錯誤。632

e_core_warning php啟動時初始化過程中的警告(非致命性錯)。764

e_compile_error 編譯時致命性錯。這就像由zend指令碼引擎生成了乙個e_error。

8128

e_compile_warning 編譯時警告(非致性錯)。這就像由zend指令碼引擎生成了e_warning警告。

9256

e_user_error 自定義錯誤訊息。像用php函式trigger_error(程式設計師設定e_error)

10512

e_user_warning 自定義警告訊息。像用php函式trigger_error(程式設計師設的e_warning警告)

111024

e_user_notice 自定義的提醒訊息。像由使用php函式trigger_error(程式設計師e_notice集)

122048

e_strict 編碼標準化警告。允許php建議修改**以確保最佳的互操作性向前相容性。

134096

e_recoverable_error 開捕致命錯誤。像e_error,但可以通過使用者定義的處理捕獲(又見set_error_handler())

148191 e_all 所有的錯誤和警告(不包括 e_strict) (e_strict will be part of e_all as of php 6.0)

1416384 e_user_deprecated

1530719 e_all

15個正好對應二進位制的15位。

需要注意的是, 上述表中的字段, 不是一成不變的, 不同的php版本, 值可能會不同, 詳細的請參考 php預定義常量

任意數目的以上選項都可以用「或」來連線(用 or 或 |),這樣可以報告所有需要的各級別錯誤。

例如,下面的**關閉了使用者自定義的錯誤和警告,執行了某些操作,然後恢復到原始的報錯級別:

例:

1

<?php

2error_reporting(0); //

禁用錯誤報告

3error_reporting(e_error | e_warning | e_parse);//

報告執行時錯誤

4error_reporting(e_all); //

報告所有錯誤

5error_reporting(e_all ^ e_notice); //

除e_notice報告所有錯誤,是在php.ini的預設設定

6error_reporting(-1); //

報告所有 php 錯誤

7error_reporting(3); //

不報e_notice

8error_reporting(11); //

報告所有錯誤

9ini_set('error_reporting', e_all); //

和 error_reporting(e_all); 一樣

10error_reporting(e_error | e_warning | e_parse | e_notice);//

表示php錯誤,警告,語法錯誤,提醒都返錯。

11 ?>

換算關係:

e_all: 十進位制為30719,換成二進位制為 111011111111111

e_notice:十進位制為8,換成二進位制為 1000

~e_notice:對e_notice進行取反操作, 變成0111

e_all & ~e_notice::e_all和 ~e_notice進行與操作,變成111011111110111,化成十進位制就是30711

可以看到e_all並不是顯示了所有的錯誤,第12位為0, 這一位的權重為2的11次方, 為2048,其實就是e_strict的值,所以e_all是顯示除e_strict的所有錯誤級別。

e_all & ~e_notice的二進位制可以看出,從右至左,第4位和第12位為0,第4位的權重為2的3次方,為8,就是e_notice的值,所以是顯示除了e_stricte_notice的所有錯誤。

兩個例子:

一、如果想顯示:e_warning,e_noticee_parse級別的錯誤,寫法與步驟:

1:先寫二進位制:

000000000000000

2:把對應的位置置為1

000000000001110

3:換算為10進製

2 ^ 1 + 2 ^ 2 + 2 ^ 3 = 14

二、error_reporting(2047) 換成 常量寫法

1:換算成二進位制

000001111111111

2:找對應關係

user_deprecated

0                  

deprecated

0recoverable_error

0strict

0user_notice

0user_warning

1user_error

1compile_warning

1compile_error

1core_warning

1core_error

1notice

1parse

1warning

1error

1版本區別:

5.4.0 e_strict 成為 e_all 的一部分

5.3.0 引入 e_deprecated 和 e_user_deprecated。

5.2.0 引入 e_recoverable_error。

5.0.0 引入 e_strict (但不包括在 e_all 之內)。

原因:如果設定為:e_all | e_strict,則表示記錄所有的錯誤資訊,可能會導致**出現一大堆的錯誤**;

但是對於程式設計師來說應該說是,可以把**優化到最優;一些非致命性錯誤雖然不影響程式的執行,

但是會使php的負擔加重,通常是增加了**程序(例如iis的應用程式池)的負擔。

其他的錯誤相關:

display_errors

錯誤回顯,一般常用語開發模式,但是很多應用在正式環境中也忘記了關閉此選項。錯誤回顯可以暴露出非常多的敏感資訊,為攻擊者下一步攻擊提供便利。推薦關閉此選項。 一旦某個產品投入使用,那麼第一件事就是應該將display_errors選項關閉,以免因為這些錯誤所透露的路徑、資料庫連線、資料表等資訊而遭到黑客攻擊。

在正式環境下用這個就行了,把錯誤資訊記錄在日誌裡。可以關閉錯誤回顯。 某個產品投入使用後,將php的log_errors開啟,預設是記錄到web伺服器的日誌檔案裡,比如apache的error.log檔案。 當然也可以記錄錯誤日誌到指定的檔案中。另外也可以設定error_log = syslog,使這些錯誤資訊記錄到作業系統的日誌裡。

1 # vim /etc/php.inidisplay_errors =off

2 log_errors =on

3 error_log = /var/log/php-error.log

php.ini中display_errors = off失效的解決

問題:php設定檔案php.ini中明明已經設定display_errors = off,但是在執行過程中,網頁上還是會出現錯誤資訊。

解決:

查log_errors=

on,據官方的說法,當這個log_errors設定為on,那麼必須指定error_log檔案,如果沒指定或者指定的檔案沒有許可權寫入,那麼照樣會輸

出到正常的輸出渠道,那麼也就使得display_errors 這個指定的off失效,錯誤資訊還是列印了  出來。於是將log_errors =

off,問題就解決了。

php的錯誤級別

fatal error 致命錯誤 指令碼終止執行 e error 致命的執行錯誤,錯誤無法恢復,暫停執行指令碼 e core error php啟動時初始化過程中的致命錯誤 e compile error 編譯時致命性錯,就像由zend指令碼引擎生成了乙個e error e user error 自...

php的錯誤級別

deprecated 不贊成使用,可能有漏洞可能效率低,以後的版本不支援等 notice 通知級別的錯誤 warning 警告 這個需要看 是不是 出了問題 以上三個程式仍然繼續向下執行 fatal error 致命錯誤 程式停止執行 parse error 解析錯誤了 直接掛了 程式停止執行 e ...

php錯誤級別

php.ini檔案中的error reporting引數 error reporting可以設定的引數如下 錯誤報告是位欄位。可以將數字加起來得到想要的錯誤報告等級。e all 所有的錯誤和警告 不包括 e strict e error 致命性的執行時錯誤 e warning 執行時警告 非致命性錯...