3

この PHP スクリプトを呼び出すと、ブラウザから非常に奇妙な反応が発生します。

<?php
    $map = array(
        'a' => function(){
                print_r('a');
            },

        'b' => function(){
                print_r('b');
            }
    );  
    $map($_GET['v']);
?>

そこに誤りがあることに、私はすでに気づいていた。次のようにする必要があるため、呼び出しの構文が間違っています。

$map[$_GET['v']]();

問題は、この間違いに対するブラウザの反応が本来あるべきものではないということです。

このスクリプトを実行すると、「接続がリセットされました」というメッセージが表示されます。他の PHP ファイル (および間違いを修正した後のこのファイル) が完全に実行されるため、サーバーは正常に稼働しています。

しかし、実際に私を困惑させているのは、ブラウザのナビゲーション バーが何をするかということです。URLを打ち込むと

localhost/cerdo.php?v=a

バーの内容が

www.localhost.com/cerdo.php?v=a

www.localhost.com 部分は Firefox でのみ発生するようです。Chromiumで試してみましたが、同様のメッセージ(「データが受信されていません」)が表示されますが、URLは同じままです。

何が起こっている?これは意味がありますか?PHP は構文エラーを報告すべきではありませんか? そして、一体なぜ Firefox は www.localhost.com にリダイレクトするのでしょうか?

4

3 に答える 3

1

PHP は構文エラーを報告すべきではありませんか?

いいえ。PHP が$map($_GET['v']);構文エラーとして報告しないのは、コードが構文的に有効であることを期待しているからです。そのため、予期しない非常に奇妙なことを実行することになります。これにより、ブラウザが説明できない場所にリダイレクトされます。

ここで重要なのは、$map($_GET['v']);実際の意味を理解することです。

于 2013-01-30T16:31:40.553 に答える
0

リダイレクトは、コードとは関係ありません。Xampp などを使用しているなど、環境設定はどのようになっていますか? その場合、Web ルートにリダイレクト スクリプトを含む index.php や .htaccess などがあることを確認してください。

于 2013-01-30T12:00:15.403 に答える
0

開発環境が初めてでない場合は、これを無視してください。

あなたの問題は、OSがドメイン名を認識できなかった(そしてOSがそれを拡張した)ことだと思います。Windows では、「hosts」ファイルは次の場所にあります。

"%SYSTEMROOT%\System32\drivers\etc\"

次の行をファイルの末尾に追加します。

127.0.0.1 ローカルホスト

(コンピューターを再起動する必要があるかもしれません。)

于 2013-01-30T12:20:34.927 に答える