Автор Тема: Как получить путь без иени файла?  (Прочитано 7259 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Никак не могу получить путь без имени файла. Пробовал использовать dirname(), но работает она не совсе так, как надо (в некоторых случаях). К примеру:

Есть путь: http://www.host.ru/test/index.php
В этом случае ф-ция сработает правильно, т.е. вернет "http://www.host.ru/test/".

Теперь такой: http://www.host.ru/test/
И опять ф-ция сработает правильно.

А вот если путь будет такой: http://www.host.ru/test
т.е. без завершающего слэша, то ф-ция вернет "http://www.host.ru/"

Как мне сделать так, чтобы я смог во всех этих трех случаях получить путь "http://www.host.ru/test"?

СПАСИБО!

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Как получить путь без иени файла?
« Ответ #1 : 28 Мая 2003, 18:27:12 »
kosm
а исходя из каких суждений скрипт должен думать что в  http://www.host.ru/test  test является папкой а не файлом ?
 
Вручную наверное нужно что-то писать (или слеш добавлять чтобы правильно dirname() работал)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн D1g174LM4n14c

  • 1m
  • Постоялец
  • ***
  • Сообщений: 137
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как получить путь без иени файла?
« Ответ #2 : 28 Мая 2003, 18:34:50 »
$path = str_replace(basename($path), \'\', $path);
Мы такие!

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Как получить путь без иени файла?
« Ответ #3 : 28 Мая 2003, 19:03:07 »
Макс
Я думаю - наличием расширения. Хотя файл без расширения тоже может быть, но тогда это точно никак не узнать...
Поэтому я состряпал ф-цию:

function GetPath($url)
{
	
$tmp pathinfo($url);
	
$ext $tmp["extension"];
	

	
if (
strpos($ext"/") > 0) {
	
	
Return 
$tmp["dirname"]."/".$tmp["basename"]."/";
	
}
	
else {
	
	
Return 
$tmp["dirname"]."/";
	
}
}


Вроде работает. Можно было бы наверно и по-красивше...

D1g174LM4n14c
Не совсем понял как все это работает, и работает ли вообще... У меня во всяком случае не прокатило :(

Оффлайн D1g174LM4n14c

  • 1m
  • Постоялец
  • ***
  • Сообщений: 137
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как получить путь без иени файла?
« Ответ #4 : 28 Мая 2003, 20:07:05 »
kosm
У меня просто имя файла удаляеться из строки тем самым оставляя только путь без имени файла...

function GetPath($url)
{
   return 
str_replace(basename($url), \'\', $url);
}
Мы такие!

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как получить путь без иени файла?
« Ответ #5 : 29 Мая 2003, 02:22:38 »
Вообщето для тех кто не вкурсе - если нету завершающего слеша то это __всегда__ имя файла. Для примера введите

http://www.deep.kiev.ua/icons
и
http://www.deep.kiev.ua/icons/

почуствуйте разницу.

Только добрые люди, делающие веб сервера устали это всем рассказывать. И исправили свои сервера. Теперь это работает так
1. присылается УРЛ неправильный
2. сервер смотрит что такого файла нету, зато есть такой каталог
3. он отвечает "302 , ресурс был перемещен на УРЛ/"
4. Броузер делает второй запрос - уже правильный.

 А мой пример - дело в том, что для виртуальных каталогов это исправление не работает ;)
 Можете проверить на любом сервере Apache.
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн D1g174LM4n14c

  • 1m
  • Постоялец
  • ***
  • Сообщений: 137
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как получить путь без иени файла?
« Ответ #6 : 29 Мая 2003, 09:39:53 »
Oak
Все верно. Вот только если бы это поняли все... :(
Мы такие!

Оффлайн Mаster

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://code.msk.ru/
Как получить путь без иени файла?
« Ответ #7 : 29 Мая 2003, 10:35:26 »
А так не проще?

<?php
echo $_SERVER["HTTP_HOST"];
echo 
dirname($_SERVER["REDIRECT_URL"]);
?>
Дурак учится на своих ошибках, умный на чужих.
умные учатся у дураков

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Как получить путь без иени файла?
« Ответ #8 : 29 Мая 2003, 11:16:57 »
Mаster
Да, интересный выход, но опять же мне не подойдет, т.к. я еще не на той странице, а только собираюсь туда пойти. УРЛ берется у меня из href...

Oak
Эт понятно. Но в моем случае нужно считать, что если нет расширения в конце урла, то это просто каталог, а если есть, то надо имя с расширением отсечь.

D1g174LM4n14c
Понятно. Но basename() не работает по класической схеме, т.е. смотрит на наличие слэша в конце урла, и опять же он решит, что "test" (из моего примера выше) - это файл, и выкусит его. :(

Кстати, интересно, вчера ф-ция, которую я выше описал - работала. А сегодня уже нет :) Странно как-то :)
Почему-то урл: http://www.host.ru/test
превращает в: http:/www.host.ru/test/ (двойной слэш портит).
Странно все это...

Оффлайн Mаster

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://code.msk.ru/
Как получить путь без иени файла?
« Ответ #9 : 29 Мая 2003, 11:30:32 »
И что. Вот так незя сделать?

<?php
$url 
"http://abracodabra.ru/path/to/page/index.php";
echo 
dirname($url);
?>
Дурак учится на своих ошибках, умный на чужих.
умные учатся у дураков

Оффлайн Mаster

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://code.msk.ru/
Как получить путь без иени файла?
« Ответ #10 : 29 Мая 2003, 11:54:08 »
Можно ещё сделать так:


$url = "http://abracodabra.ru";
$path = "/path/to/page/index";

if (preg_match("/(\\.)\\w+/",$path)) {
   echo dirname($url.$path)."
";
} else {
   echo preg_replace("/(.*)^\\//","\\\\1",$url.$path)."
";
}

?>
Дурак учится на своих ошибках, умный на чужих.
умные учатся у дураков

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Как получить путь без иени файла?
« Ответ #11 : 29 Мая 2003, 12:18:12 »
Mаster
Цитировать

И что. Вот так незя сделать?

$url = "http://abracodabra.ru/path/to/page/index.php";
echo dirname($url);
?>


В этом случае прокатит. А вот если
$url = "http://abracodabra.ru/path/to/page";
то не прокатит - получим: "http://abracodabra.ru/path/to", что для моего случая не приемлемо :(

Со вторым примером не совсем понял, но у меня в любом случае имеется только полный урл (без разделения на url и path)...

Кстати, нашел почему у меня ломался двойной слэш в моей ф-ции.
Оказывается так работает ф-ция pathinfo(), если ей передать короткий урл (без вложений папок и имен файлов).
К примеру так:

$url 
"http://test.ru/";  // вроде нормальный урл
$tmp pathinfo($url);
print_r($tmp);  

Получаем:
Array ( [dirname] => http: [basename] => test.ru [extension] => ru/ )

Не плохо он урл разложил, да? :) Чем он ему не понравился... ?
« Последнее редактирование: 29 Мая 2003, 12:27:57 от kosm »

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Как получить путь без иени файла?
« Ответ #12 : 29 Мая 2003, 12:26:59 »
pathinfo() returns an associative array containing information about path(а не урл). The following array elements are returned: dirname, basename and extension.

Для решения проблемы юзай parse_url + pathinfo
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Как получить путь без иени файла?
« Ответ #13 : 29 Мая 2003, 12:55:25 »
С pathinfo понял - спасибо. Не обратил внимания что именно путь. Сорри.
Цитировать
Alexandr:
Для решения проблемы юзай parse_url + pathinfo

Во, это действительно спасло. Теперь все работает.

function GetPath($url)
{
	
$tmp parse_url($url);
	
$host $tmp["scheme"] ."://"$tmp["host"];
	
$path $tmp["path"];
	
if (
substr($path,strlen($path)-1,1) != \'/\') {
	
	
$path = $path."/";
	
}
	
Return  $host.$path;
}

Оффлайн D1g174LM4n14c

  • 1m
  • Постоялец
  • ***
  • Сообщений: 137
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как получить путь без иени файла?
« Ответ #14 : 29 Мая 2003, 14:22:17 »
Цитировать
kosm:
Понятно. Но basename() не работает по класической схеме, т.е. смотрит на наличие слэша в конце урла, и опять же он решит, что "test" (из моего примера выше) - это файл, и выкусит его.

слеш \'/\' в конце игнорируетсяа dirname() и basename() ...
Мы такие!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28