1

PHPWebサイトをLinuxサーバーからWindowsに転送しました。1つの大きな違いを除いて、すべてが同じように機能しているようです。

$_GET['action']Linuxサーバーでは、が設定されていない場合、次のコードは無視されます。

$action = $_GET['action'];
if($action=='add'){
    echo 'good';
}

ただし、これにより、ページがWindowsサーバーに読み込まれなくなります。

動作するものは次のとおりです。

if(isset($_GET['action'])){
    $action = $_GET['action'];
}else{
    $action='';
}

if($action=='add'){
    echo 'good';
}

2つの質問:

  1. 値を持たない変数をより許容するようにサーバーを構成する方法はありますか?

  2. 2番目のコード例はより良い方法ですか?

4

3 に答える 3

3
Is there a way to configure the server to be more forgiving of variables that don't have a value?

変数の前に記号を付けると、 @phpにエラーを無視するように指示されます。しかし、私はこれを悪い習慣だと考えています。

Is the second code example better practice?

私はそれを良い習慣だと考えています、それは常にチェックするのが良いです。

IMOは、2番目に進む必要があります。いつでも、三項演算子を使用できます。だから代わりに

if(isset($_GET['action'])){
    $action = $_GET['action'];
}else{
    $action='';
}

あなたは書ける

$action = isset($_GET['action']) ? $_GET['action'] : '';

どちらも同じことをします。

于 2012-05-04T15:57:02.587 に答える
2

2番目のサーバーはデフォルトでエラーを表示するように構成されているだけですが、最初のサーバーはそうではありません。

次のコードをページの上部に配置すると、最初のサーバーにも通知が表示されます。

error_reporting(E_ALL);

変数が存在するかどうかを確認することは、常に良い習慣です。

于 2012-05-04T16:00:09.033 に答える
0

私の意見では、配列のインデックスまたは変数が設定されているかどうかを確認し、エラーレポートを控えめに冗長に保つことをお勧めします。

データの操作を容易にし、この状況が発生するたびにコードが3値で乱雑にならないようにするため(多くの場合、PHP配列を使用してオプションの構成データを保持しているが、コードに適切なデフォルトを埋め込みたい場合)、私は常にそれを見つけました次のように、配列抽出関数をコアユーティリティコードに組み込むことは建設的です。

function aex( &$srcArray, $variableName, $defaultValue = null )
{
    return isset( $srcArray[$variableName] )
            ? $srcArray[$variableName]
            : $defaultValue
            ;
}

したがって、次のように変数を抽出するだけです。

$action = aex( $_GET, 'action', 'none' );

そして、それは有用な値を持ち、警告をスローしないことが保証されます。

于 2012-05-04T16:33:48.997 に答える