Позвольте мне предварить это, сказав, что я никогда раньше не работал с php.
Я унаследовал устаревший php и пытаюсь докеризовать его, так как никто не знает, как настроить серверную среду, в которой он сейчас работает. Это приложение использует воспламенитель кода, и я не могу заставить его загрузить страницу входа. Когда я отлаживаю приложение, оно останавливает выполнение при вызове require_once () в классе. Во время отладки я заметил, что, когда требуется класс, отладчик будет проходить через строку объявления класса, открытую фигурную скобку, а затем переходит к закрывающей фигурной скобке объявления класса. Однако в этом классе, который не загружается, он наступает на строку объявления класса, открытую фигурную скобку, а затем отключает отладчик и возвращает пустую страницу в браузере.
Правильно загруженный класс
class Foo //Debugger breaks here
{//Debugger breaks here
//Debugger skips all inside code
}//Debugger breaks here
Сломанный класс
class Logger //Debugger breaks here
{//Debugger breaks here
//Debugger detaches here and blank page is return on browser
}
Я убедился, что в моем контейнере докеров установлены те же расширения php, что и на рабочем сервере, потому что я видел в Интернете примеры того, как CI возвращает пустую страницу, если mysql не установлен. Мне просто интересно, как я собираю больше информации, чтобы понять, что здесь происходит. Когда этот скрипт перестает работать, ничего не регистрируется, он просто останавливается. Тот же код работает на другом сервере, поэтому у меня должна быть проблема с настройкой.
Если сервер базы данных недоступен, может ли он проявлять такое поведение? Я поражен тем, что он не вызывает никаких исключений и не дает мне никаких подсказок относительно того, что идет не так.
РЕДАКТИРОВАТЬ
Я обнаружил код, который отключал ошибки отображения, и теперь у меня есть ошибка.
Все еще не понимаю, как это работает в другой серверной среде, а не в моей среде докеров. Я должен где-то что-то пропустить ...
Поскольку это устаревший код php - какие изменения вы используете новую версию php, в которой есть новые зарезервированные слова?
@Alex У меня есть функция отчетов об ошибках, и она не регистрирует никаких ошибок. Я могу подтвердить, что это ведет журнал отладки, но не имеет ничего общего с этой ошибкой. Я запускаю php-сервер в контейнере докеров, но предыдущая команда использует его на сервере qa. Все входили на этот сервер и занимались разработкой через ssh, поэтому я пытаюсь докеризовать приложение.
@Dekel На нем запущен php 5.3.22, а я использую 5.3.29 в своем докер-контейнере.
Пожалуйста, ответьте на все мои вопросы.
Предполагая, что класс Logger находится в Logger.php, попробуйте просто запустить php Logger.php. Если это не поможет, попробуйте добавить if (class_exists('Logger')) return; в качестве первой строки.
отладчик пропускает эти строки кода, потому что вы не прыгаете, пока не создаете экземпляр объекта этого класса - так что это нормальное поведение, я думаю ..
@Alex Версия CI - 2.0.2
@ Jasny-ArnoldDaniels Я заметил, что если я добавил class_exists ('Logger') в начало класса Logger, он вернул true, но моя точка останова в верхней части класса Logger никогда не была достигнута до того момента, когда он взорвался. Может ли это означать, что уже существует класс с именем Logger, который вызывает проблему?
Ошибки отображения @Alex и отчеты об ошибках были отключены в файле index.php, которого я не видел. Я обновил свой пост с ошибкой.
Похоже, вы дважды пытаетесь загрузить класс. Удалите один экземпляр, и все должно быть в порядке.






Включен ли отчет об ошибках? Вы проверили журналы ошибок сервера? Вы запускаете это на локальном хосте или на производственном сервере? Какая у вас версия CI?