定義された変数による PHP 通知を防ぐにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1959426

  •  21-09-2019
  •  | 
  •  

質問

基本的に、ページ上にたくさんのリンクがあるので、次のようなものを使用します

<?PHP echo $SITE_PATH ?>

同じページで何度も実行すると、PHP で通知が表示されます。

次のようなものを使用することになっているのは知っています isset() しかし、本当に電話するたびにそれを使用する必要があるのでしょうか?

<?PHP echo $SITE_PATH ?>

- - 編集 :
定義された変数の使用に切り替えると、通知が表示されなくなるようです

役に立ちましたか?

解決

2 つの解決策は次のとおりです。

  • 存在する変数のみを使用してください。おそらくそうすべきでしょう。
  • またはそれらが存在するかどうかをテストします (と isset) 使用する前に。

魔法はありません^^

アプリケーションが設定されていない変数を多数使用している場合は、設計に何らかの問題がある可能性があります。


あなたが提示したようなケースでは、何度も使用される変数については、その変数が存在することを確認し、存在しない場合は、たとえばスクリプトの先頭で '' に設定します。

あまり見栄えはよくありませんが、うまくいきます。これにより、アプリケーション全体を調べてすべてにパッチを適用する必要がなくなります。

(または、無効にすることもできます) E_NOTICE error_reporting レベル -- 私はその考えは好きではありませんが、場合によっては、コードベースを扱うにはそれが実際に唯一の方法であることもあります)

他のヒント

あなたは、@を使用してメッセージをSUPRESSすることができます:

print @$site_path;
それとも、デフォルト値を取得するために三項演算を使用することができます:

print (isset($site_path)) ? $site_path : "default_path" ;
最後に

しかし、あなたが設定されていない変数を使用するべきではありません。あなたがいる場合、あなたはあなたのアプローチを再考する必要があります。スクリプトの残りの部分はこのような問題なく実行できるように、アップフロントこの情報を扱うます。

あなたは本当にわから変数が(特にページにそれをエコー)を使用する前に設定されていることを確認する必要があります。変数が安全でないソース($ _GET、$ _POST、データベース)から来ているなら、あなたは、セキュリティ違反(クロスサイトスクリプティング(XSS)を防ぐために、フィルタリングのいくつかの種類、クロスサイトリクエストフォージェリ(CSRF)などを行う必要があります。.. 。)しかし、あなたはすべてが安全であるように感じるし、あなただけのエラーを表示したくない場合(例えば、生産中)が0にあなたのエラー報告を設定します。

例えば。 error_reporting(0);

あなたは(ページの上部にセットerror_reporting(0);)php.iniのレベルまたはページごとにこれを行うことができます。

サイドノートでは、生産にあなたがエラーを表示する必要はありません。代わりに、それらをログに記録します。開発では、あなたのエラー(E_STRICT)の全てを見てみたいです。

あなたは変数が設定されているかどうかを確認する関数を作成し、それを返すことができます:

function EchoVar() {
    global $SITE_PATH;
    return isset($SITE_PATH) ? $SITE_PATH : '';
}

// calling it
echo EchoVar();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top