2016-10-12 1 views
0

に表示されるすべてのエラーを無効にするにもかかわらず、コピー()エラーメッセージ、私が持っている:PHP:まだページ

ini_set('display_errors', 0); 
ini_set('display_startup_errors', 0); 

動作しているようですが、私はcopy()機能を使用して、アクセス拒否のディレクトリにエラーをコピーしようとすると、ページ自体に表示されます。私はそれを必要としません。しかし、私はcopy()のエラーを傍受することはできません。私はerror_get_last()try...catch (Exception $e)を試しましたが、まだそれを傍受することはできませんか?ページ上でのコピーエラーの表示を無効にする方法と、コードでそれらを傍受する方法を教えてください。ランタイムから

+1

短く修正すれば、 'copy'の間に何かが生成された場合、出力をキャッチする' ob_start(); copy(/ * whatever * /); ob_get_clean(); 'を実行できます。 'ob_start()'について読む: – JustOnUnderMillions

+0

ありがとう。私のスクリプトは 'ob_start()'で始まり、 'ob_end_flush()'で終わります。 –

+0

'ob_start()'がネストされているので、問題はありません。#それについて読むことができます;) – JustOnUnderMillions

答えて

0

それは使用する方(と、より信頼性の高い)である:

error_reporting(0); 

は、以下を参照してください。詳細はhttp://php.net/manual/en/function.error-reporting.php

また、あなたは@で式を付けることによって、レポートレベルのに関するすべてのエラーを抑制することができます。

@copy(...) 

項目:詳細はhttp://php.net/manual/en/language.operators.errorcontrol.php、これはパフォーマンス低下の原因となるものを注意している場合、ブールはfalseを返すように発現を引き起こします元の戻り値の型に関係なく、エラーが発生しました。

あなたはnginxの+ PHP-FPM(または類似)を使用している場合のini値は、PHP-FPMのプールの設定で上書きすることができる。注目に値する

apache + mod_phpを使用している場合、ini値は.htaccessファイルで上書きされることがあります。これは壊れロジックにつながる可能性としてあなたは、何をすべきかではない、error_reporting(0)に解決完全にするerror_reporting切る前に、(多くの人気ライブラリやフレームワークが例外にエラーをtraslateするハンドラを設定することで、エラー報告に依存している)

チェック。

エラー抑制演算子の移植性の観点からパフォーマンスに影響を与えます。

0

コピーエラーはあなたがする必要があるすべてで引く場合:あなたは「沈黙」のみ、このエラーをすることができますこの方法

set_error_handler(function ($errno, $errstr, $errfile, $errline) { 
    // Log the error somewhere without spooking the users 
    return true; 
} 
copy(...); 

restore_error_handler(); 

と以前のように働いて他のすべてを保ちます。

+0

私はスクリプトの冒頭に' set_error_handler'と 'set_exception_handler'の両方を持っています。問題は、私の場合、 'copy()'によって生成されたエラーは 'error_get_last()'には見えないということです。 'copy'は' TRUE'または 'FALSE'を返しますが、メッセージを受け取ることはできません –