-4

重複の可能性:
PHP: 「通知: 未定義の変数」および「通知: 未定義のインデックス」

PHP 5.4.4ローカルホストで (xampp 1.8.0)をアップグレード/インストールします。今notice error、私は自分のページにたくさん見ています。何が問題なの? これを修正するには?

エラーのセクション:

Notice: Undefined index: language in C:\xampp\htdocs\tube\include\config.php on line 93

Notice: Undefined variable: max_avatar_width in C:\xampp\htdocs\tube\include\lang\english.php on line 495

Notice: Undefined variable: max_avatar_height in C:\xampp\htdocs\tube\include\lang\english.php on line 496

Notice: Undefined index: USERID in C:\xampp\htdocs\tube\index.php on line 26

構成 PHP ページ:

if ($_REQUEST['language'] != '') // <---- Line 93 
{
    if ($_REQUEST['language'] == 'english')
    {

        $_SESSION['language'] = 'english';
    }
    elseif ($_REQUEST['language'] == 'spanish')
    {

        $_SESSION['language'] = 'spanish';
    }
}

if ($_SESSION['language'] == "")
{

    $_SESSION['language'] = "english";
}

if ($_SESSION['language'] == "english")
{
include("lang/english.php");
}
elseif ($_SESSION['language'] == "spanish")
{
include("lang/spanish.php");
}
else
{
include("lang/english.php");
}

英語の言語ページ (495 行目と 496 行目) :

$lang['491'] =  "The image width is too big. Max width is $max_avatar_width pixels."; 
$lang['492'] =  "The image height is too big. Max height is $max_avatar_height pixels.";

インデックス PHP ページ:

if($_SESSION['USERID'] == "") // <-- Line 26
{
    $showfamfilter = "AND mature='0'";
}
elseif($_SESSION['FAMILYFILTER'] == "0")
{
    $showfamfilter = "";
}
else
{
    $showfamfilter = "AND mature='0'";
}
4

4 に答える 4

6

error_reportingphp.iniの設定を変更して、を含めないようにすることができますE_NOTICE。php.iniファイルにいくつかの例があるはずです。

ただし、これは賢明ではありません。あなたがすべきことはあなたのコードを修正することです。たとえば、次の代わりに:

if ($_REQUEST['language'] != '')

あなたは書くべきです:

if (isset($_REQUEST['language']))

すべてのE_NOTICEエラーを修正すると、コードがはるかに堅牢になります。

于 2012-07-30T14:16:55.583 に答える
1

あなたの一日の終わりに、問題はあなたのコードです。最初に初期化せずに配列項目とインデックスを参照しようとしています。

現在表示されている理由は、古いサーバーE_NOTICEで error_reporting が無効になっているためです。PHP.ini が指定されていなかったに違いありません。デフォルトでは、エラーは表示されませんが、通知以外の非推奨イベントはすべてログに記録されます。

; Common Values:
;   E_ALL & ~E_NOTICE  (Show all errors, except for notices and coding standards warnings.)
;   E_ALL & ~E_NOTICE | E_STRICT  (Show all errors, except for notices)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
;   E_ALL | E_STRICT  (Show all errors, warnings and notices including coding standards.)
; Default Value: E_ALL & ~E_NOTICE
; Development Value: E_ALL | E_STRICT
; Production Value: E_ALL & ~E_DEPRECATED
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_NOTICE | ~E_DEPRECATED

; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments. Depending on the code
; which is triggering the error, sensitive information could potentially leak
; out of your application such as database usernames and passwords or worse.
; It's recommended that errors be logged on production servers rather than
; having the errors sent to STDOUT.
; Possible Values:
;   Off = Do not display any errors
;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
;   On or stdout = Display errors to STDOUT
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = Off

これは応急処置であり、今すぐ適用できます。

error_reporting( E_ALL ^ ~E_NOTICE );

アクセスする前に配列キーが存在するかどうかを確認するには、次を使用します。

if(array_key_exists( 'key you are looking for', $array ) ){
    ....
}
于 2012-07-30T14:19:13.380 に答える
1

式の配列で未定義の変数または未定義のインデックスを使用すると、「未定義の変数」または「未定義のインデックス」の通知が発生します。

値を使用する前に、値が定義されているか null であるかを常に確認することで、これを回避できます。そうすれば、アプリケーション内の状態を認識できます。

一方、異常な (必ずしも正しくない) 動作に対しては、通知警告の両方を発行できます。つまり、必要に応じて、適切な error_reporting レベルを設定することでそれらを無視できます。

于 2012-07-30T14:21:44.687 に答える
0

アクセスを試みる前に、配列インデックスが存在するかどうかを確認し、使用する前に変数が宣言されていることを確認する必要があります。

于 2012-07-30T14:16:28.420 に答える