2010-06-10 2 views
2

Я работаю над небольшой функцией, чтобы взять URL-адрес и вернуть относительный путь, основанный на том, где он находится.PHP pathinfo обманывается url в quert string. Любое обходное решение?

Если URL-адрес содержит путь в строке запроса, pathinfo возвращает неверные результаты. Об этом свидетельствует приведенный ниже код:

$p = 'http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt'; 
$my_path_info = pathinfo($p); 
echo $p . '<br/><pre>'; 
print_r($my_path_info); 
echo '</pre>'; 

, что код выхода:

http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt 

Array 
(
    [dirname] => http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir 
    [basename] => afile.txt 
    [extension] => txt 
    [filename] => afile 
) 

который, очевидно, является неправильным. Любое обходное решение?

ответ

7

Любое обходное решение?

Да, делать это right;)

$url = urlencode('http://localhost/demos/some/dir/afile.txt'); 
$p = 'http://localhost/demos/image_editor/dir_adjuster.php?u='.$url; 

и URL-адресов, особенно со строками запроса, parse_url() должны быть более надежными, чтобы извлечь компонент пути; После этого запустите на нем pathinfo().

+0

Спасибо! Это возвращает '[dirname]' correct, что давало мне проблемы, но '[extension]' и '[filename]' все еще неверны. Во всяком случае, моя проблема решена, поскольку я беспокоился о '[dirname]', но я оставил бы вопрос открытым в течение часа, чтобы узнать, сможет ли кто-нибудь получить все компоненты правильно. –

+0

@Majid ах, конечно, это URL. parse_url() должен работать лучше для этого: http://www.php.net/parse_url –

+0

Спасибо, Пекка. Да! Итак, я сначала использовал parse_url(), чтобы получить правильный «путь», затем я буду использовать pathinfo() на нем. Возможно, вы захотите включить свое решение в свой ответ, поэтому более полезно, когда люди читают это позже, но если вы не найдете его того стоит, я бы отредактировал вопрос и включил ваш метод. –

Смежные вопросы