Неустранимая ошибка PHP в зависимости от типа браузера?

Описанная ниже ситуация привела к фатальной ошибке в PHP примерно в 50% браузеров, тогда как в других браузерах код работал нормально. Браузер или какой-либо клиентский сниффинг не использовался. Насколько я знаю, это невозможно (PHP работает по-разному в зависимости от клиентского браузера). Проблема решена, но я все еще хочу понять, как именно это могло произойти.

Итак, index.php включает в себя 2 файла:

include('a.php');
include('b.php');

а.php:

the_function();

б.php:

function the_function(){
  //code
}

Фатальной ошибкой в ​​50% браузеров было то, что функция the_function не была определена в файле .php, поэтому файл .php выполнялся сразу после включения. В то время как в других браузерах он сначала включает все файлы php и только потом начинает выполняться.

Если я правильно помню, это были Mac Safari, Mac Chrome и IE, но я даже не знаю, характерно ли такое поведение для одних и тех же браузеров на разных машинах.

проблема, конечно, была решена путем изменения порядка включения. Но я все же хочу понять, почему это произошло.


person Hacktisch    schedule 17.01.2016    source источник
comment
Потому что вы пытаетесь получить доступ к функции, которая не доступна.   -  person Andreas Schmidt    schedule 17.01.2016
comment
Я понимаю, что Андреас, пожалуйста, прочитайте мой вопрос полностью. Я хочу знать, как это может быть, что это дает фатальную ошибку в некоторых браузерах, а в некоторых браузерах нет.   -  person Hacktisch    schedule 17.01.2016
comment
Эти тесты выполнялись на одном сервере или на разных серверах?   -  person RiggsFolly    schedule 17.01.2016
comment
Тот же единственный сервер. Описанное мной поведение имело место при посещении сайта несколькими клиентами с разных IP-адресов. Если интересно попробовать, но не получается воспроизвести, могу перестроить ситуацию на том сервере, где это произошло   -  person Hacktisch    schedule 17.01.2016
comment
Это может быть интересно   -  person RiggsFolly    schedule 17.01.2016


Ответы (1)


Не уверен на 100%, но насколько я знаю, такое поведение может происходить, когда код PHP кэшируется в APC или другом кеше байт-кода. По этой причине иногда код уже закеширован и функция доступна в начале.

В PHP вы можете определить функцию позже, чем вызывать ее, и она работает, если вы находитесь в том же файле. Пример: https://3v4l.org/m951d

Таким образом, это не зависит от браузеров, это зависит от текущего состояния кеша для php-скрипта.

person Brain Foo Long    schedule 17.01.2016