2010-02-04 95 views
2

我正在開發一個使用PHP的Web應用程序,這個應用程序正在我的一些朋友的測試中。你推薦我用什麼方法來知道他們得到了什麼樣的警告,但是不用ini_set('display_errors', 1);來顯示它們?每天通過電子郵件發送PHP警告或如何?

此外,該應用程序將運行在Intranet中,我將無法遠程訪問。

我正在考慮每天向我發送包含一些信息的電子郵件,但我不知道哪些是重要的事實要保存。你有我的文章/樣本嗎?你有更好的建議嗎?

+1

有關錯誤處理的信息,請參閱PHP手冊:http://de2.php.net/manual/en/book.errorfunc.php – Gordon 2010-02-04 20:33:35

回答

6
  • 您可以記錄錯誤而不顯示它們。

例如,你可以這樣做:

error_reporting(E_ALL | E_STRICT); //For PHP 6 E_STRICT become part of E_ALL 
ini_set('display_errors', 'Off'); 
ini_set('log_errors', 'On'); 
ini_set('error_log', $_SERVER['DOCUMENT_ROOT'] . '/php.log'); 

您還可以編輯的php.ini或使用.htaccess做(如果在Apache)。

  • 如果您無法遠程訪問此日誌,則可以創建一個小型PHP應用程序,通過電子郵件向您發送日誌。

您可以使用PHP mail(),但像PHPMailer這樣的庫會加快速度(並且更容易使用)。

  • 有一個CRON job(或類似的東西)每天(或每週或其他)發送電子郵件。
0

我認爲這是唯一的可能性。

如果你可以連接那裏你可以看到apache日誌。

但是不然。對不起。

2

編寫一個錯誤處理程序並使用set_error_handler來確保它被調用,而不是默認的。在那個處理程序中,你可以做任何你認爲最適合你的目的。

如果您想要做每日電子郵件,您可以將數據保存到數據庫或文件,並且每天一次運行cronjob以發送包含最新數據的電子郵件。我可能更願意保存到數據庫中的日誌記錄表中,然後在相關時通過某個界面查看。

雖然這並不會抓住所有東西 - 所有E_WARNING都會被捕獲,但並非所有其他類型都會被捕獲。例如,解析錯誤不能以這種方式捕獲,如果您也想要處理異常,則應該使用set_exception_handler

0

我最好的建議是閱讀關於PHP的set_error_handler函數。它可以讓你確切地確定發生錯誤時會發生什麼 - 無論是通過電子郵件發送,記錄還是你想做的任何事情。

現在,有許多關於在PHP中記錄錯誤的精彩文章,而不是將它們顯示給最終用戶。一些隨機的例子,我發現了一個30秒的谷歌搜索: http://davidwalsh.name/custom-error-handling-php http://www.electrictoolbox.com/log-php-errors-log-errors-error-log/ http://www.w3schools.com/php/php_error.asp

有很多方法在PHP來處理錯誤。除了前面提到的,你可以依靠默認的PHP錯誤日誌(默認情況下,PHP使用Apache的錯誤日誌,即/ var/log/httpd/error_log)。但是,您可以修改您的php.ini,將消息發送到您喜歡的任何文件。您可以每天檢查該文件以查看發生了什麼錯誤。

您還可以設置一個CRONTAB腳本,每天在該文件中讀取一次並通過電子郵件發送給您,然後將其清除。

同樣,我建議set_error_handler作爲一個更靈活的選項。

相關問題