pdoTools icon indicating copy to clipboard operation
pdoTools copied to clipboard

ElementhPath when using @FILE can not be outside of MODX_BASE_PATH

Open dimitrihilverda opened this issue 4 years ago • 7 comments

When using @FILE to include tpl files, MODX_BASE_PATH is alway's added, and ../ does not work because those are also stripped.

if (strpos($path, MODX_BASE_PATH) === false && strpos($path, MODX_CORE_PATH) === false) { $path = MODX_BASE_PATH . $path; }

Our Elements are outside the MODX_BASE_PATH, on the same level as our CORE_Path. There is no way for us now, to reach those elements when using @FILE...

dimitrihilverda avatar Sep 28 '21 09:09 dimitrihilverda

Any suggestions?

sergant210 avatar Sep 28 '21 17:09 sergant210

My suggestion would be that this MODX_BASE_PATH replacements must be a option maybe? if there is a setting to disable this or add other Constance to use there, Or remove the part where all dots are removed, so that we can use ../ to go one folder up.

dimitrihilverda avatar Sep 30 '21 07:09 dimitrihilverda

Any suggestions?

Может быть использовать функцию realpath?

Например, код:

echo realpath(MODX_BASE_PATH.'/core/../assets/');

на выходе дает:

/home/modx.local/public_html/assets

Т.е. в итоге код получится такой (насколько понимаю):

if (strpos($path, MODX_BASE_PATH) === false && strpos($path, MODX_CORE_PATH) === false) {
    $path = realpath(MODX_BASE_PATH . $path);
}

Соответственно, если написать в path: ../elements/, тогда реальное значение будет: /home/modx.local/elements/. MODX_BASE_PATH: /home/modx.local/public_html/

EMDM45 avatar May 31 '22 11:05 EMDM45

@EMDM45 Две точки позволяют выйти на любой уровень. Чем здесь поможет realpath?

sergant210 avatar Jun 10 '22 04:06 sergant210

@EMDM45 Две точки позволяют выйти на любой уровень. Чем здесь поможет realpath?

Как я понял, что как раз таки у автора две точки не работают почему-то:

and ../ does not work

А realpath преобразует все точки, случайные двойные // и прочее в правильный абсолютный путь. И еще проверяет на существование файла. Поэтому и предложил... ну вдруг поможет :) Возможно где-то в другом месте кода...

EMDM45 avatar Jun 10 '22 05:06 EMDM45

2 точки не работают по причине того, что pdoTools не разрешает выходить за пределы сайта. А автор топика вынес файловые элементы выше корня сайта.

П.С. На самом деле каждый может написать свой вариант. Для этого нужно расширить класс pdoTools и указать его в системных настройках.

sergant210 avatar Jun 10 '22 05:06 sergant210

This is still the problem, the strange thing is that this check for MODX_BASE_PATH or MODX_CORE_PATH is only in the @FILE part, but when you use and file: {include 'file:elements/chunk/structure/head.tpl'} this check is not done, and our elements path works fine, I think that this check in @FILE should be removed. there is no need for it, because if you use file: for includes you need to set the whole path anayway.

dimitrihilverda avatar Feb 10 '24 13:02 dimitrihilverda