當MySQLi,例如,我正在爲mysql_
函數做一個自定義的包裝。不可用,並且當它無法連接時,它會拋出異常。然而,致命的錯誤輸出是這樣的:信息太多,PHP錯誤?
Fatal error: Uncaught exception 'Exception' with message 'Failed to connect to database.' in
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php
:16
Stack trace:
#0C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php
(49):MySQL->__construct('localhost', 'miniticket', 'mtu:[email protected]~qR6f9...')
#1C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\index.php
(3):require_once('C:\Program File...')
#2 {main} thrown in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php on line 16
正如你看到的,我的數據庫密碼被清楚地顯示給大家看。不好。我不想關閉這些消息,特別是在開發過程中,但我不希望顯示敏感信息。使用set_error_handler
也不是一個好的解決方案,因爲我必須解析所有內容,而且這很容易出錯。
因此......有沒有一種簡單的方法可以在錯誤消息中的函數中禁用顯示參數,最好是通過PHP而不是在某些配置文件中?
編輯:禁用除文件名之外的文件路徑也是一種獎勵。
是否捕捉到異常(並且在出現'無法連接到數據庫'時生成自己的錯誤消息)的可能性? – nickb
@nickb:我寧願不這樣做,因爲這個類將無處不在,可以通過不同的方式處理異常。我想我可以用「死」來代替,但它感覺不太乾淨,尤其是在可以恢復錯誤的情況下。 – Ryan
您可以隨時捕獲異常並拋出自己的異常,該異常僅包含原始異常中的'Exception :: getMessage',該異常在其堆棧跟蹤中沒有密碼。 – nickb