我在改寫PEAR的Text_LanguageDetect例外的錯誤處理的過程中,真的不知道該怎麼在例外與動態數據做:PHP例外:在哪裏放置動態數據?
throw new Text_LanguageDetect_Exception(
'Language database does not exist.',
Text_LanguageDetect_Exception::DB_NOT_FOUND
);
在這裏,我想包括文件名這是試圖打開,但問題是哪裏把它:
Language database /path/to/file.ext does not exist.
Language database "/path/to/file.ext" does not exist.
Language database does not exist: /path/to/file.ext
Language database does not exist: "/path/to/file.ext"
1 + 2是適當的英語句子,而3 + 4可以很容易到grep在碼的消息。另外,在3 + 4中更容易用代碼提取文件名。
我應該使用哪一個,爲什麼?
另一個問題是:我應該在哪裏放置文件名?
當我把它作爲例外消息時,如果他看到消息,它可能會向攻擊者提供有關服務器上文件結構的信息。如果沒有文件名,調試起來會更困難。
因爲應在生產服務器上禁用錯誤消息,所以我沒有看到攻擊者獲得關於文件結構的信息。它不是組件編寫者有責任預測組件用戶的配置錯誤。關於我更喜歡哪個消息:4.除此之外,它是一個民意調查類型的問題,不適合我所猜測的。 – Gordon 2012-01-15 12:09:14
使用'sprintf()',您可以更輕鬆地解耦和更改內容,同時保持代碼清潔。接下來,檢查整個組件的風格,以便始終保持相似,這將減少學習曲線。提供對您的API用戶有用的所有信息,以處理異常情況。 – hakre 2012-01-15 12:14:34
可能的重複[如何編寫好的錯誤消息?](http://stackoverflow.com/questions/194537/how-does-one-write-good-error-messages) – hakre 2012-01-15 12:15:38