PHP - 在地图中调用函数后的奇怪行为

时间:2013-01-30 10:59:51

标签: php firefox localhost anonymous

在调用这个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?

3 个答案:

答案 0 :(得分:1)

PHP不应该报告语法错误吗?

没有。如果PHP没有报告$map($_GET['v']);,因为语法错误是因为它期望代码在语法上有效。所以它最终会执行一些你不期望的非常奇怪的东西。这会导致您的浏览器重定向到一些无法解释的位置。

这里的关键是要了解$map($_GET['v']);实际意味着什么。

答案 1 :(得分:0)

重定向与您的代码无关。您的环境如何设置,例如你在使用Xampp等吗?在这种情况下,请确保在您的Web根目录中有任何index.php或.htaccess或其他任何包含重定向脚本的内容。

答案 2 :(得分:0)

如果这不是你第一次与你开发环境,请忽略这一点:

我认为你的问题是:操作系统无法识别域名(操作系统扩展了它)。 在Windows下,您可以在此处找到“主机”文件:

“%SYSTEMROOT%\ System32 \ drivers下\等\”

将此行添加到文件末尾:

127.0.0.1 localhost

(也许你应该重新启动电脑。) 它应该解决你的