アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
環境/PHP5.2.5

<?php

error_reporting(0); //←エラー出力を「完全にオフ」にしているつもり
hoge //←確実にエラーを起こす因子

?>

というソースの場合、

「Parse error: syntax error,~略~」

といったエラーが出力されてしまいます。

error_reporting(0); であっても、
致命的なエラーについては、やはり出力されてしまうのでしょうか?

完全にエラーをオフにする方法を知りたいと思っています。

//-------PHPマニュアル-----------
あなたのコードをプローブから保護するために
error_reporting() を 0 に設定するか、
php.ini のオプション display_errors をオフに設定する、
のいずれかでエラーリポートを完全に無効にすべきです。
//-------------------------------

と、書かれてあるので、
error_reporting(0);にて、 エラー出力を
「完全に無効に」できると思ったのですが…。

A 回答 (3件)

http://php.benscom.com/manual/ja/errorfunc.confi …

構文エラー(syntax error)は、そのスクリプトを読み込んだ時点でエラーが吐かれてしまいますので、スクリプト中に記述された全ての命令を解釈しないです。
ini_set関数でdisplay_errorsを設定する、error_reporting関数を設定するなどしても、構文エラーは抑止できません。php.iniで設定する必要があります。
    • good
    • 1
この回答へのお礼

こんばんは、hogehogeさん。
アドバイスをありがとうございます。

ini_set()で設定できる内容にも限界がある、
ということをどこかで読んだことがあります。
本件もその1つのケースなのでしょうね。

よって、構文エラーまで出力を抑制したい場合には、
php.iniを直接変更する必要があるわけですね。

教えて頂いたURLに、
「開発をサポートする仕組みであり、本番のシステムでは
使用すべきではありません」
と書かれておりますが、

私が利用しているレンタルサーバ上で、現在、構文エラーが出力されてしまう状態にあるのは、
本来であれば、マズイ状態ということなのでしょうね。

レンタルサーバですので、私個人が、php.iniを直接変更することは
おそらくデキナイと思われます。

なので、error_reporting(0)で抑制できないほどのエラーについては、
本番サイトへアップする前に、ナントカしておく必要がありますね。
(当たり前の話で、恐縮ですが。)

私のように、php.iniを直接変更できない状況において、
出来る限り、エラーを吐かないような設定にするには、、
ただただ、error_reporting(0) を使えば良い、
という理解でよろしいでしょうか?

もっと、エラー抑制強度は上げられますでしょうか?

例えば、
syntax errorは抑制できないけれども、
ini_set()を使えば、もっとエラー抑制が可能である…とか。

もし、ご存知でしたら、ご教授下さい。
よろしくお願い致します。

お礼日時:2009/08/25 23:23

そこのサーバだったら、.htaccessファイルにPHPの設定を記述できますので、


.htaccessファイルを作成の上、
---------
php_value display_errors 0
---------
と記述してやれば、エラーが表示されなくなります。

ini_setに関しては、その関数の記述を許可していないサーバがあった場合にまったく聞かないので、両方記述しておいたほうが良いかなぁと思います。
レンタルサーバの場合、様々なシバリがある場合がありますので、重複する記述にしておいても良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

ホゲホゲさんは、歩くPHPマニュアルですね。
(普段、78を省略して、黙読してます。)

某サーバの仕様のことも含め、
ほんとに、色々な事をご存知のようですね。
ビックリです。

.htaccessにて、
「php_value display_errors 0」という設定ですね。
分かりました!
この設定にすることで、
「構文エラー」出力をも抑止できてしまうということなんですよね。
なんと強力なんでしょう!
もっとも、そんな状態でアップすることはありませんが。

>レンタルサーバの場合、様々なシバリがある場合がありますので、
>重複する記述にしておいても良いのでは

サーバによっては、セキュリティなどを考慮し、
危なそうな「組み込み関数」を使用不可にしている所もあるようですね。
ただ、そのことから、「重複記述テクニック」は思い浮かびませんでしたが…。
書籍からは学びにくい、実践的な知識だなぁと感じました。
と同時に、技量の差を痛感いたしました。

お礼日時:2009/08/26 04:48

構文エラーのような致命的なものでなければ、


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

とすれば表示されなくなると思います。
ご利用のサーバがどこなのかは分かりませんが、場所によってはコントロールパネルである程度変更できたりすると思いますが、そういった場所の設定は見てみましたか?
    • good
    • 0
この回答へのお礼

ini_set('display_errors', 0);

error_reporting(0);

が等価であれば、後者の方が書きやすいので、
書きやすい方を選択します~^^
(等価でない場合には、ご忠告頂けると嬉しいです。)

php.iniの設定変更について、
サーバで確認しました所、どうやら無理のようです。

質問・要望ページにて、
ユーザから「php.iniの設定を○○に変更して下さい」という
要望が書き込まれていましたので…。

共用サーバのため、php.iniの設定変更が自由ではないのかもしれません。
ちなみに、某XR○○.comという所を利用しています。

こことは別に利用しているサーバ(こちらも共用)では、
不思議と、php.iniファイルを自由にイジレタのですが…。
共用サーバだけど、php.iniは独立しているといった仕様なのでしょうね。

お礼日時:2009/08/26 00:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!