4

私のサイトは問題なく動作していましたが、突然サーバーの CPU 使用率が非常に高くなり始めたので、コードをより注意深くチェックし、E_ALLエラー報告を有効にしました。

その後、この「通知」が非常に多くあることがわかりました。

Notice: Undefined index: userID in /var/www/vhosts/mydomain.com/httpdocs/header.php on line 8

ほとんどまたはそれらは、設定されていない Cookie を参照します。たとえば、次のようになります。

$uid = $_COOKIE['userID'];

ユーザーがログに記録されていない場合、すぐに通知を受け取り、使用するたびに$uid.

これについて知りたいこと: この通知は無害ですか、それとも本当に私のサイトに問題を引き起こす可能性がありますか? (速度の問題、エラーなど)

4

4 に答える 4

10

これは単なる通知です。次のコードを試してください。

$uid = isset($_COOKIE['userID']) ? $_COOKIE['userID'] : 0;

ハムレスではありません (観点によっては)。エラー報告機能でこれを無効にすることができます。それ以外の場合、正しい方法は、インデックスが存在するかどうかを確認し、存在isset($_COOKIE['userID'])しない場合はデフォルト値を定義することです (nullたとえば)。

$var = isset($foo) ? $foo : 'default';

変数が存在するかどうかわからない場合は、変数が存在するかどうかを確認する必要があります。

$var = 'foo'
if($var == 'foo') { // I known $var is defined, because I have defined it.
    [..]
}

/** 
 * Above, I don't known if user go to mywebsite.com/index.php or
 * mywebsite.com/index.php?foo=bar, so, I need to verify if index is defined
 */
if(isset($_GET['foo']) && $_GET['foo'] == 'bar') {
    [...]
}
于 2012-07-05T06:56:38.257 に答える
2

通知を出すには余分な労力がかかるため、これらの通知は少し速度の問題を引き起こします。

ただし、主な問題は、これが重大なエラーであることです。あなたは存在しないものを操作しようとしています。これは悪いことが起こるかもしれませんし、そうでないかもしれませんが、それはあなたのプログラムが正しくないことを意味します。実際の問題を確認して解決するには、常に全力でエラー レポートを作成して開発する必要があるため、未定義のインデックスや未定義の変数に関する通知は深刻であり、解決する必要があります。PHP が不平を言うものはすべて深刻であり、解決する必要がありますThe Definitive Guide To PHP's isset And empty を参照してください。

于 2012-07-05T07:00:04.137 に答える
1

通常、通知は無害ですが、アプリケーションの設計が不適切であることを示している可能性があります。一般に、利用可能な PHP ツール (つまりisset($someVar)) を利用して、ビジネス ロジックが変数の初期化を適切に処理していることを確認することをお勧めします。E_ALL エラー報告設定でそのような通知が表示されない場合は、常に改善されています。

于 2012-07-05T07:00:27.780 に答える
0

注意警告は最初の観点では無害ですが、プログラミングが正しくなく、次の行でエラーが発生する可能性があることに注意してください。

あなたの例では、使用する方が良いです

$uid = isset($_COOKIE['userID'])?$_COOKIE['userID']:0;

したがって、 $uid には常に値があり、値が 0 より大きい場合は、間違った userId があることを確認できます...

于 2012-07-05T07:01:06.333 に答える