2012-02-04 10 views
1

テストサーバーでPHPメール関数を呼び出すと、警告が表示されます。これは、モールが故障したときにシステムをテストできるメールサーバーがないので正しいです。私はこの機能が警告をスローしないようにしたい。私はこれをどのように達成しますか?PHPメール関数の警告を無効にする

機能自体はまだ失敗するはずです。 (つまり、falseを返す)マイケル

+0

メールサーバーが利用可能かどうかを検出しようとしていますか?例えば、セットアップ/環境スクリプトで? –

+0

すべての返答いただきありがとうございます。私の場合、私はAjaxのphpスクリプトを実行していました。これはメールを送信するものの中にあります。メールが重要ではなく、失敗した場合にはログに記録されるため、phpファイルの出力に警告を含めることができませんでした。私は前に抑圧演算子@を聞いたことがあります、そして、私はそれを使用しようとしないallaysが、この ケースで私はそれが良い解決策だと思います。 –

答えて

1
use @mail(parameters...) 

おかげで、出力メールを報告する任意のエラーが

が生じる可能性があります@supressesまた、すべて一緒に

/wの何が悪い
error_reporting(E_ALL ^E_WARNING) to supress warnings all together 
0

を警告をsuprressすることができます@?

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

ええと、彼が出力やエラーログについて話しているのだろうか?いくつかのサーバー(私のような)は、実行中のスクリプトによって抑制されていても、Apacheエラーログにエラーを書き込みます。 – animuson

+0

これは、log_errorsディレクティブの行に沿っていて、最初の答えが扱っているもののようなものです。関数ごとにそれを扱うことは大変です。 – quickshiftin

+1

['@'抑制演算子](http://php.net/manual/en/language.operators.errorcontrol.php)IMOは[反パターン]です(http://en.wikipedia.org/wiki)。/Error_hiding)のアプローチはあまりにも簡単に誤用されたり虐待されたりします。このオペレータのほぼすべてのユースケースには、より良いテクニックが存在します。私自身のアプローチは、根本的な原因を調査したり、何を達成しようとしているのかを判断したり、省略したりするより良い方法を見つけることです。 –

3

有効な警告を抑制しようとするのではなく、テストサーバーでメール機能をスキップしてみませんか?

はいっそ

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

か、のようなもの、あなたがあなたのサーバーは、開発/テスト/本番モードであるかどうかを判断するためにテストすることができ、グローバル変数を設定してください。その後、プロダクションモードでない場合は、メールメソッドをスキップすることができます。

@で警告メッセージを抑制することはできますが、コードを運用サーバーに展開するときに警告を抑制するコードを残す危険性があります。

+0

開発環境の警告のみが表示されるので、これが最適な解決方法です – andrewtweber

+0

実際には私のサーバーにはメール機能がありますが、テスト目的ではメールが失敗したときのシステムの動作をテストするために無効にする必要があります。 –

+0

@Michaelすべての警告よりも単一のメール機能を無効にする方が良い!私はこれをあなたが選んだ答えではなく、最良の答えとして選ぶことを強く考えます。 – andrewtweber

関連する問題