Сайт 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 = / путь / к / 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 и все вызовы к ней. Затем я получаю еще одну ошибку, на этот раз из базы данных:

Вт Ноя 03 13:09:05 2015] [error] [client 45.24.29.225] Неустранимая ошибка PHP: необработанное исключение 'PDOException' с сообщением 'SQLSTATE[22P02]: недопустимое текстовое представление: 7 ОШИБКА: недопустимый синтаксис ввода для типа boolean: ""'в /Library/WebServer/Documents/XXXXX/Website/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:438\nStack trace:\n#0 /Library/WebSer/Documents/XXXXX/Website/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php(438): запрос PDO-> ('SELECT id, time...')\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, time...')\n#2 /Library/WebServer/Documents/XXXXX/Website/module/Application/src/Application/Model/BaseModel.php(214): Zend\Db\Adapter\Adapter->query('SELECT id, time...', 'execute')\n#3 / Библиотека / WebServer / Документы / XXXXX / Веб-сайт / модуль / Приложение / src / Приложение / Модель / Календарь Model.php(71): Application\Model\BaseModel->executeQuery('SELECT id, time...')\n#4 / Библиотека / WebSe в / Library / WebServer / Documents / XXXXX / Веб-сайт / vendor / zendframework / zendframework / library / Zend / Db / Adapter / Driver / Pdo / Connection.php в строке 438

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

public function getTodaysHours ($ timeTypeName) {$ timeTypeId = $ this-> getTimeTypeId ($ timeTypeName);

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

            if($variableHours)
                   return $this->getDisplayForTimes($variableHours['time_from'],

$ VariableHours['time_to']);

            $sql = sprintf("SELECT id, time_from, time_to, day_of_week
                    FROM open_times
                    WHERE (day_of_week = '%s' OR day_of_week = 'All')
                      AND (is_dst = '%s' OR is_dst IS NULL)
                      AND time_type_id = '%s' ORDER BY day_of_week DESC;",
                      CalendarModel::getToday(), CalendarModel::getIsDst(), $timeTypeId);

            $results = $this->executeQuery($sql);
            $results = $results->toArray();
            $results = current($results);

            return $this->getDisplayForTimes($results['time_from'], $results['time_to']);
    }

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

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

1 ответ

Решение

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

Я до сих пор понятия не имею, как раньше работала функция printMediaFunction. Но я завернул его в проверку function_exists и все хорошо.

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