camo-mania
Программные разработки для CMS Simpla, расширяющие и изменяющие стандартный функционал системы.

Каталог товаров

Каталог статей

Неверное определение скриптом папки магазина

В некоторых случаях в Simpla скрипт неверно определяет локальный адрес текущей страницы, и в частности, локальную папку, в которую установлена CMS.

В файле view/View.php есть строка
$subdir = substr(dirname(dirname(_FILE__)), strlen($_SERVER['DOCUMENT_ROOT']));
Она используется для определения типа страницы.
Такое действие предполагает, что значения _FILE__ и $_SERVER['DOCUMENT_ROOT'] начинаются от одного корня. Однако это работает не на всех хостингах. Встретился недавно случай, когда эти значения таковы
/usr/home/b/domains/...
/home/b/domains/...
Из-за этого неверно определяется $this->page со всеми вытекающими последствиями...

Вообще в Simpla в процессе формирования страницы скрипт дважды определяет локальный адрес текущей страницы, и в частности, локальную папку, в которую установлена CMS.
Первый раз в api/Config.php, второй - в файле view/View.php
Почему-то это делается разными способами. В первом случае

// Вычисляем DOCUMENT_ROOT вручную, так как иногда в нем находится что-то левое
$localpath=getenv("SCRIPT_NAME");
$absolutepath=getenv("SCRIPT_FILENAME");
$_SERVER['DOCUMENT_ROOT']=substr($absolutepath,0,strpos($absolutepath,$localpath));

// Адрес сайта - тоже одна из настроек, но вычисляем его автоматически, а не берем из файла
$script_dir1 = realpath(dirname(dirname(_FILE__)));
$script_dir2 = realpath($_SERVER['DOCUMENT_ROOT']);
$subdir = trim(substr($script_dir1, strlen($script_dir2)), "/\\");

Во втором

// Текущая страница (если есть)
$subdir = substr(dirname(dirname(_FILE__)), strlen($_SERVER['DOCUMENT_ROOT']));
$page_url = trim(substr($_SERVER['REQUEST_URI'], strlen($subdir)),"/");
if(strpos($page_url, '?') !== false)
$page_url = substr($page_url, 0, strpos($page_url, '?'));

Результат их действия этих двух способов не всегда одинаков. Даже несмотря на то, что первом случае скрипт исправляет суперглобальную переменную
$_SERVER['DOCUMENT_ROOT'], а во втором она испрльзуется уже в исправленном виде.

Явно имеем некоторую путаницу.
Возможно, стоило бы значение $page_url определять сразу же в api/Config.php и записывать для хранения в $this->vars.
Или запоминать как-то еще, если не хочется хранить этот значение рядом с фундаментальными настройками.
Во всяком случае, определять значения надо ОДИН РАЗ в одном месте. Как известно, повтор кода - риск дополнительных ошибок...


  • Отзывы (0)
  • Добавить отзыв

Отзывы:

© 2018 simpla-tuning.com