Нашел сегодня забавный баг в 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);
Вот так все работает =)
- Вперед
- Назад