[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: LINK вида /../
ЗлОй ПрОграММер
Всем привет, недавно открыл для себя что на страницах встречаются link типа ../../catalog что означает перенос на 2 уровня вверх относительно текущей страницы, в php есть функция которая на основе текущего url страницы и link строит полный путь от корня сайта?
AllesKlar
Означает просто на 2 уровня вверх по структуре каталогов сервера относительно расположения скрипта.
Делают так говнокодеры.
Тру-пацаны имеют константу типа SITE_URL, которая есть и в темплейтах, и в яваскриптах, и горя не знают.

_____________
[продано копирайтерам]
stump
Если 2 фолдера отсчитывается от корня сайта?

_____________
Трус не играет в хокей
ЗлОй ПрОграММер
да дело не в том как делают, а есть ли уже готовые функции которые преобразуют такие линки, или придётся мне самому писать
AllesKlar
realpath

_____________
[продано копирайтерам]
ЗлОй ПрОграММер
AllesKlar
это если на своём сайте применять, а если просто есть url
www.domain.ru/test/url/php/
и линк ../../wiki
как быть?
ЗлОй ПрОграММер
Вот нашёл фунцию

/**
* Приведение ссылки к абсолютному URI
*
*
@param string $link ссылка (абсолютный URI, абсолютный путь на сайте, относительный путь)
*
@param string $base базовый URI (можно без "http://")
* @return string абсолютный URI ссылки
*/

function uri2absolute($link, $base)
{
if (!preg_match('~^(http://[^/?#]+)?([^?#]*)?(\?[^#]*)?(#.*)?$~i', $link.'#', $matchesLink)) {
return false;
}
if (!empty($matchesLink[1])) {
return $link;
}
if (!preg_match('~^(http://)?([^/?#]+)(/[^?#]*)?(\?[^#]*)?(#.*)?$~i', $base.'#', $matchesBase)) {
return false;
}
if (empty($matchesLink[2])) {
if (empty($matchesLink[3])) {
return 'http://'.$matchesBase[2].$matchesBase[3].$matchesBase[4];;
}
return 'http://'.$matchesBase[2].$matchesBase[3].$matchesLink[3];
}
$pathLink = explode('/', $matchesLink[2]);
if ($pathLink[0] == '') {
return 'http://'.$matchesBase[2].$matchesLink[2].$matchesLink[3];
}
$pathBase = explode('/', preg_replace('~^/~', '', $matchesBase[3]));
if (sizeOf($pathBase) > 0) {
array_pop($pathBase);
}
foreach ($pathLink as $p) {
if ($p == '.') {
continue;
} elseif ($p == '..') {
if (sizeOf($pathBase) > 0) {
array_pop($pathBase);
}
}
else {
array_push($pathBase, $p);
}
}

return 'http://'.$matchesBase[2].'/'.implode('/', $pathBase).$matchesLink[3];
}

К сожалению работает некорректно с такими дикими ссылками как
../../../../../aaa/bbb/

как поправлю этот момент выложу сюда код, может кому пригодиться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.