PHP - странное поведение после вызова функций на карте

Я испытываю довольно странную реакцию браузера при вызове этого 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?


person cangrejo    schedule 30.01.2013    source источник
comment
ваш код в порядке.. посмотрите на эту скрипту, но проверьте, делаете ли вы что-то еще в вашем коде!! пожалуйста, покажите другие блоки кода, которые могут быть причиной возникновения ошибки   -  person mamdouh alramadan    schedule 30.01.2013
comment
Сценарий состоит только из показанного кода, поэтому других возможных виновников нет.   -  person cangrejo    schedule 30.01.2013
comment
ваш редирект или что-то в этом роде   -  person mamdouh alramadan    schedule 30.01.2013
comment
NB: приведенный выше код корректен только для PHP 5.3+; если вы используете более раннюю версию, вы не можете использовать анонимные функции.   -  person Wilbo Baggins    schedule 30.01.2013
comment
Удивительно, но при использовании PHP 5.3.1 я получил фатальную ошибку: имя функции должно быть строкой в ​​prueba.php в строке 12.   -  person eversor    schedule 31.01.2013
comment
Итак, если бы я пытался отладить это, я бы открыл вкладку сети Firebug, поставил бы галочку на опции сохранения, чтобы вы все еще могли видеть ответы после перенаправления, а затем вызвал бы проблему. Изучив ответ, вы либо увидите какое-то перенаправление, либо что-то странное, из-за чего FF интерпретирует его как перенаправление. Мне было бы очень интересно узнать, как выглядит полный ответ (включая заголовки)   -  person Basic    schedule 28.02.2013


Ответы (3)


Разве PHP не должен сообщать о синтаксической ошибке?

Нет. Если PHP не сообщает $map($_GET['v']); как синтаксическую ошибку, это связано с тем, что он ожидает, что код будет синтаксически допустимым. Таким образом, он выполняет некоторые очень странные вещи, которых вы не ожидаете. Это приводит к перенаправлению вашего браузера в какое-то необъяснимое место.

Ключевым моментом здесь является понимание того, что на самом деле означает $map($_GET['v']);.

person Alien    schedule 30.01.2013

Перенаправление не имеет ничего общего с вашим кодом. Как настроена ваша среда, например. вы используете Xampp и т. д.? В этом случае убедитесь, что в корне вашего веб-сайта есть файл index.php или .htaccess или что-либо еще, содержащее скрипт перенаправления.

person Salman    schedule 30.01.2013
comment
Дело в том, что это перенаправление происходит только с этим кодом. Если я просто исправляю синтаксическую ошибку, файл загружается правильно. - person cangrejo; 30.01.2013

Если вы не впервые работаете со средой разработки, не обращайте внимания на это:

Я думаю, ваша проблема в том, что ОС не может распознать доменное имя (и ОС расширяет его). В Windows вы можете найти файл hosts здесь:

"%SYSTEMROOT%\System32\драйверы\etc\"

Добавьте эту строку в конец файла:

127.0.0.1 локальный хост

(Возможно, вам следует перезагрузить компьютер.) Это должно решить вашу проблему.

person Ghingis    schedule 30.01.2013
comment
локальный хост привязан к 127.0.0.1. Как я уже сказал, другие скрипты загружаются отлично. - person cangrejo; 30.01.2013