Помогите преобразовать путь

Flanker

незнайка
Помогите преобразовать путь

есть адрес рессурса ../../Source(дастаю ../../Source/image.gif) <=использую так что б, не думать где лежит движок, проблема состоит в следуешем=> движок, который работает с этими данными(только просматривает), лежит где-то
отдельно, и поэтому ему непонятно.
Задача:../../Source/image.gif=> http:/localhost/shownews/editor/Source/image.gif, что б добавить в базу, для того что б любой движок мог вывести этот рисунок.

Спасибо.
 

WP

^_^
А сам написать не можешь? Сочувствую.

-~{}~ 13.08.06 03:45:

PHP:
$u = '/path/to/folder/foo/bar/../../test';
$n = max(substr_count($u,'/..'),substr_count($u,'\..'));
for($i = 0; $i < $n; $i++) {$u = preg_replace('~[\\/][^\\/]+[\\/]\.\.~','',$u);}
echo $u;
/// path/to/folder/test
Чисто подумалось.
 

zerkms

TDD infected
Команда форума
WP
для того что б любой движок мог вывести этот рисунок.
исходя из этой фразы можно сделать вывод, что файл там есть

ps: а что если подождать что скажет вопросун на предложения? ;)

-~{}~ 13.08.06 10:59:

упс.... не заметил что это ссылка.... мои посты считать недействительными......
 

Flanker

незнайка
zerkms,WP-спасибо вы задели ОЧЕНЬ важные вещи, которых я не знал.
Но вы неправильно поняли задачу.

Есть путь от движка =>: ../../Source/image.gif
А есть глобальный адресс=>http:/localhost/shownews/editor/Source/image.gif

Например с движка адрессом=> http:/localhost/show/index.php
<img src='../../Source/image.gif'> <=работать не будет
=> необходимо <img src='http:/localhost/shownews/editor/Source/image.gif
'>

а что выдаст realname("http://mail.ru"); ?


выход из моей ситуации покажу через несколько минут,
если есть желание.
 

WP

^_^
zerkms ошибся.

я правильно понял твою задачу.

Кусок из моего паука:
PHP:
        if (isset($uri['path']) and $uri['path']{0} != '/')
        {
         $uri['path'] = preg_replace('~(?<=/)[^/]+$~','',$curi['path']).$uri['path'];
         $n = max(substr_count($u,'/..'),substr_count($u,'\..'));
         for($i = 0; $i < $n; $i++) {$uri['path'] = preg_replace('~[\\/][^\\/]+[\\/]\.\.~','',$uri['path']);} 
        }
Это готовое решение. $uri = parse_url('ссылка на картинку'); $curl = parse_url("ссылка на документ в котором картинка");
 

Flanker

незнайка
WP, спасибо, но я слаб в регулятивных выражениях, можешь обьяснить свою логику(для меня).

Мой результат:

Код:
//
function getFullName($source)
{
 Global $PHP_SELF,$SERVER_NAME;
 $point="http://$SERVER_NAME".dirname($PHP_SELF);
 $source=explode("/",$source);
 foreach($source as $val)
  {
    if ($val=="..")
        $point=dirname($point);
    else $point.="/$val";
  }
  return $point;
}
//

PHP_SELF=/shownews/editor/lookfiles/engine.php
path=../../Source

=>

point=http://localhost/shownews/Source
 

lucas

Новичок
if (isset($uri['path']) and $uri['path']{0} != '/')
{
$uri['path'] = preg_replace('~(?<=/)[^/]+$~','',$curi['path']).$uri['path'];
$n = max(substr_count($u,'/..'),substr_count($u,'\..'));
for($i = 0; $i < $n; $i++) {$uri['path'] = preg_replace('~[\\/][^\\/]+[\\/]\.\.~','',$uri['path']);}
}
-~{}~ 13.08.06 14:48:

WP

Как насчет того, чтобы прекратить постить "готовые решения", а потратить твое драгоценное время на объяснения тредстартеру, как это работает?

(Это относится не только к этому топику.)
 

WP

^_^
lucas
06:00 :)
Flanker
По просьбам трудящих объясняю как это работает.
PHP:
if (isset($uri['path']) and $uri['path']{0} != '/')
// (если существует $uri['path'] и первый символ не равен /, т.е. ссылка относительная.)
        {
         $uri['path'] = preg_replace('~(?<=/)[^/]+$~','',$curi['path']).$uri['path'];
// (убираем всё после последнего слеша из пути до документа, и прибавляем к этому значению относительную ссылку)
         $n = max(substr_count($u,'/..'),substr_count($u,'\..'));
// считаем сколько нужно сделать проходов.
         for($i = 0; $i < $n; $i++) {$uri['path'] = preg_replace('~[\\/][^\\/]+[\\/]\.\.~','',$uri['path']);} 
// в цикле заменяем "(один \ или /)(символы не \ и не / больше или равно одному)(один \ или /)(точка точка)"
// на пустую строку. таким образом захватываем разряд который стоит перед .. и сам ...
        }
Вот и все чудеса.
 
Сверху