03 Август, 2016

Добавляем страницы ошибок в Cockpit CMS

Привет! Как ни странно в официальной документации данной CMS, а также в документации роутера Lime который по умолчанию идет в комплекте с ней отсутствуют упоминания о том как добавить корректные обработчики страниц 404 и 500. Ответ нашелся в одном из issue на гитхабе посвященном вообще другому вопросу =)

Итак, чтобы все заработало перед маршрутами добавляем вот этот обработчик:

$app = new Lime\App();

$app->on("after", function() {
        switch($this->response->status){
            case "404":
                $this->response->body = $this->render(__DIR__."/views/404.php");
                break;
            case "500":
                $this->response->body = $this->render(__DIR__."/views/500.php");
                break;
        }
    });

$app->bind('/', function () use ($app) {

Как вы видите тут тоже кроется небольшой баг который мы обходим прописыванием абсолютного пути к вьюшкам. Вот и все, теперь все работает =)

19 Июль, 2016

Чиним роутер Cockpit CMS под FastCGI

Привет! Не факт что это кому то еще понадобится кроме меня, но записать решение стоит. Итак, есть CockpitCMS в которой из коробки есть микрофреймворк Lime используюийся для роутинга и рендера вьюх. Так вот, если у вас PHP работает через FastCGI вся эта балалайка работать не будет.

Проблема в том что в роутере используется $_SERVER['PATH_INFO'] которая в данном случае будет пуста. Я починил вот так:

index.php

...

include_once('cockpit/bootstrap.php');

$_SERVER["PATH_INFO"] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); //чиним этой строкой

$app = new Lime\App();

$app->bind('/', function () use ($app) {
...

Заодно также добавил фикс в .htaccess убираюший лишние слеши:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
03 Апрель, 2015

Подменяем время на PHP

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

Так что самый безопасный способ это переопределение встроеных в PHP функций. Да, патчить и компилировать PHP мы не будем =)

Мы просто возьмем отсюда модуль PHP-TimeCop и установим его согласно приложенной инструкции.

После всех этих манипуляций нам остается только вызвать в начале скрипта вот такую функцию

$mytime = time()-86400;

timecop_freeze($mytime);

Таким образом мы зафиксировали в скрипте время ровно на сутки назад. Для удобства небольшой скрипт с этими двумя строчками можно подключать ко всем скриптам через директиву auto_prepend_file в .htaccess

Home