July 3, 2013

Monstra CMS пустая страница вместо админки

Нашел сегодня забавный баг в Monstra CMS.

Добавил новый хост в панели Vesta CP и поставил туда Monstra CMS. Все поставилось без ошибок, публичная часть работает, а вот админка не отображается.

В логах ошибка такого плана:

PHP Fatal error: require_once(): Failed opening required '/home//web/site.dev/public_html/engine/_init.php' (include_path='.:/usr/share/pear:/usr/share/php') in /home/admin/web/site.dev/public_html/admin/index.php on line 25

Внимательный читатель сразу обратит внимание на /home//web/. Видимо чего то не хватает =)

$_SERVER[“DOCUMENT_ROOT”] выглядит вот так “/home/admin/web/site/public_html…”

Куда же делся наш админ? Идем в /admin/index.php и видим код такого плана:

<?php
//...

// Main engine defines
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', rtrim(str_replace(array('admin'), array(''), dirname(__FILE__)), '\\/'));
define('BACKEND', true);
define('MONSTRA_ACCESS', true);

По факту получается что разработчики вместо того чтобы отрезать от пути последнее - admin делают полный str_replace. Видимо понадеялись что слово adminв пути ни у кого больше не встретится =)

Решил этот вопрос мало претендующими на изящность костылями:

<?php
//...

// Main engine defines
define('DS', DIRECTORY_SEPARATOR);

//My patch
$ar_root = explode(DS,dirname(__FILE__));
if(end($ar_root)=="admin") array_pop($ar_root);
$root = implode("/",$ar_root);
define('ROOT',$root) ;
echo ROOT;
//define('ROOT', rtrim(str_replace(array('admin'), array(''), dirname(__FILE__)$
//End of my patch

define('BACKEND', true);
define('MONSTRA_ACCESS', true);

Вот так все работает =)