2012-02-04 66 views
1

當我在我的測試服務器上調用PHP郵件功能時,我收到警告。這是正確的,因爲當商場出現故障時,我沒有啓用郵件服務器來測試系統。我希望這個函數不要拋出警告。我將如何實現這一目標?禁用PHP郵件功能的警告

雖然函數本身仍然應該失敗。 (即返回false)

感謝邁克爾

+0

您是否試圖檢測郵件服務器是否可用?例如,可能在安裝/環境腳本中? – 2012-02-04 08:04:13

+0

感謝您的回覆。在我的情況下,我正在運行一個Ajax PHP腳本,其中包括髮送郵件。我不能讓PHP文件的輸出包含警告,因爲郵件不是那麼重要,如果它失敗了,就會被記錄下來。我以前聽說過抑制運算符,我會試圖不使用它,但在這種情況下,我認爲這是一個很好的解決方案。 – 2012-02-04 08:17:09

回答

1
use @mail(parameters...) 

@supresses任何錯誤報告輸出的郵件可能會產生

您也可以suprress警告一起

error_reporting(E_ALL ^E_WARNING) to supress warnings all together 
0

什麼是錯瓦特/ @?

@mail(// should suppress errors); 
+0

嗯,我想知道他是在說*輸出還是錯誤日誌。因爲有些服務器(如我的)仍然會將錯誤寫入Apache錯誤日誌,即使它被執行腳本所抑制。 – animuson 2012-02-04 07:47:17

+0

這會更符合log_errors指令的行,然後,類似於第一個答案正在處理的內容。在每個功能的基礎上進行交易會讓人厭倦。 – quickshiftin 2012-02-04 07:49:29

+1

['@'抑制運算符](http://php.net/manual/en/language.operators.errorcontrol.php)IMO是[反模式](http://en.wikipedia.org/wiki/Error_hiding)方法太容易被濫用或濫用。在這個操作員的幾乎所有使用案例中都存在更好的技術,我自己的方法是調查根本原因(或確定試圖實現的目標)並找到一個省略它的更好方法。 – 2012-02-04 08:07:55

3

而不是試圖壓制有效的警告,爲什麼不跳過測試服務器上的郵件功能?

這樣做

if($_SERVER[ 'SERVER_NAME' ] != 'my.testing.server'){ 
    mail(...); 
} 

或者,更好的是,設置一個全局變量,你可以測試,以確定您的服務器是在開發/測試/生產模式。然後,如果郵件方法不處於生產模式,則可以簡單地跳過該方法。

您可以使用@禁止警告消息,但這會導致代碼保留就位,可能會在代碼部署到生產服務器時取消警告。

+0

這是最好的解決方案,因爲它只會抑制開發環境中的警告 – andrewtweber 2012-02-04 08:13:28

+0

實際上,我的服務器具有郵件功能,但出於測試目的,我需要禁用它以測試郵件發生故障時系統的工作方式。 – 2012-02-04 08:21:29

+0

@Michael更好地禁用一個郵件功能比所有警告!我會強烈地考慮選擇這個作爲最佳答案,而不是你選擇的那個。 – andrewtweber 2012-02-04 08:51:40