• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:error_reporting(0);にも関わらず、エラーが出力されるのは何故でしょう?)

error_reporting(0)がエラー出力を無効にできない理由は何でしょうか?

このQ&Aのポイント
  • error_reporting(0)を使用しても、致命的なエラーが発生するとエラーが出力されることがある。
  • PHPマニュアルによると、完全にエラーを無効にするには、error_reporting()を0に設定するか、php.iniのdisplay_errorsオプションをオフにする必要がある。
  • しかし、実際にはparse errorなどの致命的なエラーにはエラーハンドリングが機能せず、エラーが出力されることがある。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://php.benscom.com/manual/ja/errorfunc.configuration.php#ini.display-errors 構文エラー(syntax error)は、そのスクリプトを読み込んだ時点でエラーが吐かれてしまいますので、スクリプト中に記述された全ての命令を解釈しないです。 ini_set関数でdisplay_errorsを設定する、error_reporting関数を設定するなどしても、構文エラーは抑止できません。php.iniで設定する必要があります。

march4
質問者

お礼

こんばんは、hogehogeさん。 アドバイスをありがとうございます。 ini_set()で設定できる内容にも限界がある、 ということをどこかで読んだことがあります。 本件もその1つのケースなのでしょうね。 よって、構文エラーまで出力を抑制したい場合には、 php.iniを直接変更する必要があるわけですね。 教えて頂いたURLに、 「開発をサポートする仕組みであり、本番のシステムでは 使用すべきではありません」 と書かれておりますが、 私が利用しているレンタルサーバ上で、現在、構文エラーが出力されてしまう状態にあるのは、 本来であれば、マズイ状態ということなのでしょうね。 レンタルサーバですので、私個人が、php.iniを直接変更することは おそらくデキナイと思われます。 なので、error_reporting(0)で抑制できないほどのエラーについては、 本番サイトへアップする前に、ナントカしておく必要がありますね。 (当たり前の話で、恐縮ですが。) 私のように、php.iniを直接変更できない状況において、 出来る限り、エラーを吐かないような設定にするには、、 ただただ、error_reporting(0) を使えば良い、 という理解でよろしいでしょうか? もっと、エラー抑制強度は上げられますでしょうか? 例えば、 syntax errorは抑制できないけれども、 ini_set()を使えば、もっとエラー抑制が可能である…とか。 もし、ご存知でしたら、ご教授下さい。 よろしくお願い致します。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

そこのサーバだったら、.htaccessファイルにPHPの設定を記述できますので、 .htaccessファイルを作成の上、 --------- php_value display_errors 0 --------- と記述してやれば、エラーが表示されなくなります。 ini_setに関しては、その関数の記述を許可していないサーバがあった場合にまったく聞かないので、両方記述しておいたほうが良いかなぁと思います。 レンタルサーバの場合、様々なシバリがある場合がありますので、重複する記述にしておいても良いのではないでしょうか。

march4
質問者

お礼

ホゲホゲさんは、歩くPHPマニュアルですね。 (普段、78を省略して、黙読してます。) 某サーバの仕様のことも含め、 ほんとに、色々な事をご存知のようですね。 ビックリです。 .htaccessにて、 「php_value display_errors 0」という設定ですね。 分かりました! この設定にすることで、 「構文エラー」出力をも抑止できてしまうということなんですよね。 なんと強力なんでしょう! もっとも、そんな状態でアップすることはありませんが。 >レンタルサーバの場合、様々なシバリがある場合がありますので、 >重複する記述にしておいても良いのでは サーバによっては、セキュリティなどを考慮し、 危なそうな「組み込み関数」を使用不可にしている所もあるようですね。 ただ、そのことから、「重複記述テクニック」は思い浮かびませんでしたが…。 書籍からは学びにくい、実践的な知識だなぁと感じました。 と同時に、技量の差を痛感いたしました。

すると、全ての回答が全文表示されます。
回答No.2

構文エラーのような致命的なものでなければ、 ini_set('display_errors', 0); error_reporting(0); とすれば表示されなくなると思います。 ご利用のサーバがどこなのかは分かりませんが、場所によってはコントロールパネルである程度変更できたりすると思いますが、そういった場所の設定は見てみましたか?

march4
質問者

お礼

ini_set('display_errors', 0); と error_reporting(0); が等価であれば、後者の方が書きやすいので、 書きやすい方を選択します~^^ (等価でない場合には、ご忠告頂けると嬉しいです。) php.iniの設定変更について、 サーバで確認しました所、どうやら無理のようです。 質問・要望ページにて、 ユーザから「php.iniの設定を○○に変更して下さい」という 要望が書き込まれていましたので…。 共用サーバのため、php.iniの設定変更が自由ではないのかもしれません。 ちなみに、某XR○○.comという所を利用しています。 こことは別に利用しているサーバ(こちらも共用)では、 不思議と、php.iniファイルを自由にイジレタのですが…。 共用サーバだけど、php.iniは独立しているといった仕様なのでしょうね。

すると、全ての回答が全文表示されます。

関連するQ&A