Сайт Apache / PHP / Zend / PostGres перестал работать выходные

Мы унаследовали веб-сайт, работающий на сервере Mac OSX (10.5.8). Он состоит из следующих компонентов:

  • Apache 2.2.25
  • PHP 5.3.27
  • Zend Framework v2.3.0
  • Подключается к базе данных PostGres на другом сервере.
    • pdo_pgsql: PostGreSQL 9.2.4

В понедельник утром нам позвонили и сообщили, что веб-сайт не работает. Единственное, что отображается, - это фон сайта. Когда я смотрю в исходный код страницы, я вижу, что у меня есть начальный тег , а затем документ останавливается.

На сайте нет регистрации PHP. Я внес следующие изменения в файл php.ini:

  • error_reporting = E_ALL (это было ~ E_ALL)
  • error_log = / path / to / php_error_log
  • log_errors = On

Затем я перезапустил службу Apache . Вот ошибки, которые я начинаю видеть в журнале (он фактически связан с Apache error_log):

Неустранимая ошибка PHP: невозможно повторно объявить printMediaIcons () (ранее заявлено в /Library/WebServer/Documents/XXXXX/Website/module/Application/view/layout/header.phtml:20) в /Library/WebServer/Documents/XXXXX/Website/module/Application/view/layout/header.phtml в строке 39

Я не специалист по PHP, но я понимаю сообщение об ошибке. Я не понимаю, как это вообще могло сработать. Я хочу подчеркнуть, что мы не меняли ничего на этом сайте.

Пытаясь продвинуться вперед, я отредактировал файл header.phtml и удалил функцию printMediaIcons и все ее вызовы. Затем я получаю еще одну ошибку, на этот раз из базы данных:

Вт, 3 ноября, 13:09:05 2015] [ошибка] [клиент 45.24.29.225] PHP Fatal ошибка: неперехваченное исключение 'PDOException' с сообщением 'SQLSTATE [22P02]: недопустимое текстовое представление: 7 ОШИБКА: недопустимый ввод синтаксис для типа boolean: "" 'in /Library/WebServer/Documents/XXXXX/Website/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:438\nStack трассировка: \ n # 0 /Library/WebServer/Documents/XXXXX/Website/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php(438): PDO-> query ('ВЫБРАТЬ идентификатор, время ...') \ n # 1 /Library/WebServer/Documents/XXXXX/Website/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Adapter.php(190): Zend \ Db \ Adapter \ Driver \ Pdo \ Connection-> execute ('SELECT id, время ... ') \ n # 2 /Library/WebServer/Documents/XXXXX/Website/module/Application/src/Application/Model/BaseModel.php(214): Zend \ Db \ Adapter \ Adapter-> query ('ВЫБРАТЬ идентификатор, время ...', 'выполнить') \ n # 3 /Library/WebServer/Documents/XXXXX/Website/module/Application/src/Application/Model/CalendarModel.php(71): Приложение \ Модель \ BaseModel-> executeQuery ('ВЫБРАТЬ идентификатор, время ...') \ n # 4 / Библиотека / WebSe в /Library/WebServer/Documents/XXXXX/Website/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php в строке 438

SQL, против которого он возражает, представляет собой простой оператор для чтения часов работы предприятия. Вот функция, которую он вызывает:

публичная функция getTodaysHours ($ timeTypeName) { $ timeTypeId = $ this-> getTimeTypeId ($ timeTypeName);

  $ variableHours = $ this-> getVariableHours ($ timeTypeId);

 если ($ variableHours)
 вернуть $ this-> getDisplayForTimes ($ variableHours ['time_from'],

$ variableHours ['time_to']);

  $ sql = sprintf ("ВЫБРАТЬ id, time_from, time_to, day_of_week
 FROM open_times
 ГДЕ (day_of_week = '% s' OR day_of_week = 'Все')
 И (is_dst = '% s' ИЛИ ​​is_dst IS NULL)
 И time_type_id = '% s' ЗАКАЗАТЬ ПО day_of_week DESC; ",
 CalendarModel :: getToday (), CalendarModel :: getIsDst (), $ timeTypeId);

 $ results = $ this-> executeQuery ($ sql);
 $ results = $ results-> toArray ();
 $ results = текущий ($ results);

 вернуть $ this-> getDisplayForTimes ($ results ['time_from'], $ results ['time_to']);
 }

На прошлой неделе сайт работал нормально. Я изучил файлы conf, ini, журналы ошибок, и это все, что я смог найти. Я понятия не имею, что изменилось / сломалось на сервере.

У кого-нибудь есть идеи, как начать решать эту проблему?

0
задан 3 November 2015 в 21:40
1 ответ

Нашел! Проблема связана с функцией getTodaysHours . Что-то в этом запросе в отношении is_dst вызывает ошибку. Я вернул фиктивное значение из этой функции и POOF сайт восстановлен.

У меня до сих пор нет нет представления, как printMediaFunction работала раньше. Но я завернул это в проверку function_exists, и все в порядке.

0
ответ дан 5 December 2019 в 11:46

Теги

Похожие вопросы