This content is over 14 years old. It may be obsolete and may not reflect the current opinion of the author.
這老梗了,可是好像很多人不知道:在 PHP 5.3 的開發環境上,error_reporting 的值要開成「E_ALL | E_STRICT」而不是只有 E_ALL。不知為何,這件事情連 PHP: The Good Parts 之類的書都沒寫。
原因是因為 E_STRICT 是比 E_ALL 更高層次的錯誤檢查,會把一些 coding standard 的東西也挖出來警告。而為何 E_ALL 不是字面上的 ALL 這我也不知道…所以根據 Debian package 帶的 php.ini,不同的環境應該要這樣設定:
- 開發環境 (development):E_ALL | E_STRICT
- 正式環境 (production):E_ALL & ~E_DEPRECATED
當然,正式環境的 display_errors 應該要關掉。如果不希望產生任何錯誤 log 也是可以設定成 error_reporting = 0,不過程式炸掉的話就死無對證了。
每個值的定義可以看這篇文件。
E_ALL不包含E_STRICT的原因或許是向後相容性?E_STRICT 是 PHP5 才出來的東西。
另外有印象看到E_STRICT在PHP6中會被包含在E_ALL裏面,一下找不到確定的資料就是。