PHP-скрипт завершается, пока для класса вызывается require_once ()

Позвольте мне предварить это, сказав, что я никогда раньше не работал с 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 не установлен. Мне просто интересно, как я собираю больше информации, чтобы понять, что здесь происходит. Когда этот скрипт перестает работать, ничего не регистрируется, он просто останавливается. Тот же код работает на другом сервере, поэтому у меня должна быть проблема с настройкой.

Если сервер базы данных недоступен, может ли он проявлять такое поведение? Я поражен тем, что он не вызывает никаких исключений и не дает мне никаких подсказок относительно того, что идет не так.

РЕДАКТИРОВАТЬ

Я обнаружил код, который отключал ошибки отображения, и теперь у меня есть ошибка.

Все еще не понимаю, как это работает в другой серверной среде, а не в моей среде докеров. Я должен где-то что-то пропустить ...

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

Alex 25.04.2018 21:45

Поскольку это устаревший код php - какие изменения вы используете новую версию php, в которой есть новые зарезервированные слова?

Dekel 25.04.2018 21:47

@Alex У меня есть функция отчетов об ошибках, и она не регистрирует никаких ошибок. Я могу подтвердить, что это ведет журнал отладки, но не имеет ничего общего с этой ошибкой. Я запускаю php-сервер в контейнере докеров, но предыдущая команда использует его на сервере qa. Все входили на этот сервер и занимались разработкой через ssh, поэтому я пытаюсь докеризовать приложение.

Braden 25.04.2018 21:56

@Dekel На нем запущен php 5.3.22, а я использую 5.3.29 в своем докер-контейнере.

Braden 25.04.2018 21:58

Пожалуйста, ответьте на все мои вопросы.

Alex 25.04.2018 22:07

Предполагая, что класс Logger находится в Logger.php, попробуйте просто запустить php Logger.php. Если это не поможет, попробуйте добавить if (class_exists('Logger')) return; в качестве первой строки.

Arnold Daniels 25.04.2018 22:13

отладчик пропускает эти строки кода, потому что вы не прыгаете, пока не создаете экземпляр объекта этого класса - так что это нормальное поведение, я думаю ..

sintakonte 25.04.2018 22:23

@Alex Версия CI - 2.0.2

Braden 26.04.2018 14:48

@ Jasny-ArnoldDaniels Я заметил, что если я добавил class_exists ('Logger') в начало класса Logger, он вернул true, но моя точка останова в верхней части класса Logger никогда не была достигнута до того момента, когда он взорвался. Может ли это означать, что уже существует класс с именем Logger, который вызывает проблему?

Braden 26.04.2018 14:50

Ошибки отображения @Alex и отчеты об ошибках были отключены в файле index.php, которого я не видел. Я обновил свой пост с ошибкой.

Braden 27.04.2018 16:15

Похоже, вы дважды пытаетесь загрузить класс. Удалите один экземпляр, и все должно быть в порядке.

Alex 27.04.2018 23:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
98
0

Другие вопросы по теме