開發模式與產品模式下的PHP報錯處理

2021-09-13 22:23:56 字數 1639 閱讀 8754

程式報錯總是在所難免,儘管我們書寫**時已經格外小心。

在開發php程式時,我們希望遇到php報錯,可以第一時間展示給我們,以便於除錯。當程式開發完成,成為正式產品時,我們希望將沒有**到的報錯資訊記錄到錯誤日誌中,而不是將這些報錯資訊展示給使用者,因為使用者極有可能利用這些暴露出指令碼路徑、資料庫資訊或其他的報錯資訊進行一些破壞性的黑客行動。

php指令碼在執行過程中遇到錯誤將以報錯的形式處理,有些錯誤在報錯之後會終止指令碼繼續執行,而有些不會,具體請參閱手冊。

php的報錯處理方式根據以下配置選項進行,這些配置可以在**中宣告以設定,也可以在php.ini檔案中設定。如果不需要經常改動這些配置,還是建議在php.ini檔案中設定,以使你的**更清爽簡潔。

# 是否列印錯誤資訊到瀏覽器/命令列介面

# 開發模式下建議開啟,產品模式下強烈建議關閉

ini_set('display_errors', 'on');

# 是否記錄錯誤資訊到日誌

# 開發模式和產品模式下都建議開啟

ini_set('log_errors', 'on');

# 指定錯誤資訊日誌檔案,若開啟了 log_errors 選項,記得指定日誌檔案位置

# 要確保執行 php 指令碼的系統使用者擁有該檔案的 write 許可權,否則日誌無法被寫入

ini_set('error_log', '/usr/local/php/errors.log');

# 該選項用以設定錯誤報告的等級

# 等同於 error_reporting(e_all)

# 無論開發模式還是產品模式下都建議開到e_all(報告所有的錯誤資訊)

# 產品模式下也需要設定此選項,因為關閉了 display_errors 並開啟了 log_errors

# 所以瀏覽器/命令列介面不會因此暴露報錯資訊

ini_set('error_reporting', e_all);

除此之外,php 還給開發者提供了在**中將自定義的錯誤資訊記錄到錯誤日誌檔案的內建函式:

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )
必選引數是message,呼叫此函式會將message寫入php.ini中定義的error_log檔案中。

另外,使用者可以通過函式:

mixed set_error_handler ( callable $error_handler [, int $error_types = e_all | e_strict ] )
以自定義的方式來處理指令碼執行時出現的錯誤,如果使用者註冊了error_handler並指定了error_types,那麼當發生這些error_types的錯誤時,將繞過php的標準錯誤處理程式(也就是說既不會輸出錯誤資訊,也不會記錄錯誤資訊日誌),而是執行error_handler中的處理程式。該函式的詳細用法請參閱手冊,

php與設計模式 狀態模式

當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。demo created by phpstorm 狀態介面 inte ce istat...

debug模式與relese模式下

我們經常有些 是需要在debug模式下執行,而relese模式下是不用去執行的 比如log日誌,relese是不希望執行的 比如 簽名校驗,我們希望在debug模式下是不執行的 這就要引出buildconfig,該類存在於 這個類存在乙個debug常量 我們就是根據這個常量來判斷那些 執行 debu...

php的開發模式 基礎篇

現在流行的開發方式是使用極限程式設計的方式,極限程式設計的思想是測試用例在編碼之前就開始,在這裡我不打算對極限程式設計做過多的說明,如果你在之一塊不太明白的話可以去網上搜尋,本文的開發方式僅僅是使用這種方式而已,如果你不是太明白的華也沒有關係,只要你有實際的專案經驗也是完全的可以明白的。在開始之前,...