Я опубликовал решение в качестве ответа
У меня возникла странная проблема при переносе некоторого кода PHP на новый сервер.Старый сервер работает под управлением PHP 5.3 (x86), а новый сервер работает под управлением PHP 7.0 (x64).Оба работают на IIS 7.5.
Код, вызвавший проблему, был в работе без проблем в течение почти трех лет.Он отлично работает на текущем производственном сервере, а также на двух системах разработки.Все три работают на PHP 5.3 (x86).
Эти ошибки не возникают, когда я использую PHP 5.3 (x86) на новом сервере.
Общий файл (с именем _common_funcs.php) содержит общие функции, которые вызываются из многих сценариев.Поскольку некоторые из этих сценариев могут взаимодействовать, я использую require_once ('_ common_funcs.php'), чтобы включить файл.Это довольно простой подход.
На новом сервере в первый раз a скрипт запускает, он генерирует ошибку 'Cannot redeclare'.Обновление страницы не отображает ошибку - она отображает страницу, как ожидалось.Например:
- // localhost / app / display_account.html? Account = 123456 генерирует ошибку.
- // localhost / app / display_account.html? Account = 123456 снова делаетошибка не отображается.
Перезапуск сервера IIS приводит к повторному генерированию ошибки при первом запуске.
Теперь для нечетной части.Обратите внимание на заглавные буквы дисков в приведенной ниже ошибке:
Cannot redeclare acct_has_graduated() (previously declared in D:\app_directory\includes\_common_funcs.php:2061) in d:\app_directory\includes\_common_funcs.php on line 2061
Если я жестко закодирую полный путь в одной строке require_once () и использую строчную букву d, то ошибка в журнале поменяется местамикапитализация.Это результаты 'd: \ app ...' и 'D: \ app ...'.
Если я жестко закодирую оба вызова, которые получаются, когда этот скрипт выполняется с ошибкой, не генерируется, независимо от того, какую комбинацию заглавных букв я использую.
И чтобы сделать это немного интереснее, функция acct_has_graduated () является последней функцией в файле _common_funcs.php.Но если я отключаю OpCache в php.ini, я получаю следующую ошибку:
Cannot redeclare update_ledger() (previously declared in D:\app_directory\includes\_common_funcs.php:7) in d:\app_directory\includes\_common_funcs.php on line 42
Обратите внимание на две вещи: update_ledger () - это первая функция в файле _common_funcs.php, а «строка 42» - этозакрывающая скобка функции update_ledger () (строка 7 - объявление).
Если кто-то может указать мне правильное направление на этом, я был бы очень признателен.