phpで、特定のURLを変数として受け取ると、

そのURLの最深ディレクトリを取得したいです。

例えば、
http://www.hatena.ne.jp/aaa/bbb/ccc.html
http://www.hatena.ne.jp/aaa/bbb/
http://www.hatena.ne.jp/aaa/bbb/ccc.php
の3つのURLのケースでは、
http://www.hatena.ne.jp/aaa/bbb/
を取得したいです。

http://www.hatena.ne.jp/
の場合は、
http://www.hatena.ne.jp/
を取得したいです。

実現の参考になるサイトや、コードがありましたら、
お願いします。

回答の条件
  • 1人5回まで
  • 登録:2007/08/01 18:03:00
  • 終了:2007/08/01 19:33:42

ベストアンサー

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/08/01 19:04:06

ポイント35pt

こんな感じですかね。

function get_lastdir($url) {
  return preg_replace('!(https?://)((.+/)+)(.+)!ie', 'sprintf("%s%s/", "$1", dirname("$2$4a"));', $url) ;
}

echo get_lastdir('http://www.hatena.ne.jp/aaa/bbb/ccc.html') ;
id:onigirin

どうもありがとうございます!

無事目的が達成されました!

2007/08/01 19:25:54

その他の回答(1件)

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/08/01 19:04:06ここでベストアンサー

ポイント35pt

こんな感じですかね。

function get_lastdir($url) {
  return preg_replace('!(https?://)((.+/)+)(.+)!ie', 'sprintf("%s%s/", "$1", dirname("$2$4a"));', $url) ;
}

echo get_lastdir('http://www.hatena.ne.jp/aaa/bbb/ccc.html') ;
id:onigirin

どうもありがとうございます!

無事目的が達成されました!

2007/08/01 19:25:54
id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402007/08/01 19:13:03

ポイント35pt

(1)parse_url()を使って分解

http://www.7key.jp/program/php/parse_url.html

(2)path 部分をsplit()で分解

  http://blog.simpraight.com/entry/51

(3) (1)と(2)を使ってほしい文字列をつくる

力ずくベタベタコーディングですけど。

id:onigirin

どうもありがとうございます。

parse_url、面白いですね。

これは使えそうですねぇ。

なんだかこの関数で今までやりたかったことも解決できそうで、夢が広がりました!

2007/08/01 19:30:53
  • id:GEN111
    「http://www.hatena.ne.jp」(最後にスラッシュが無い)という場合を考えないなら
    return dirname($url.'a').'/' ;
    でもいいかと思いますが。
  • id:onigirin
    どうもありがとうございます。

    dirname使ったとき、http://hatena.ne.jp/
    とかだとhttp:/になってしまってアップアップなってました。
    スラッシュなしも含めたいので、とても助かりました!
  • id:KUROX
    本当にベタベタコーディングでしたね(苦笑)
    すいません。
  • id:onigirin
    どうもありがとうございます。

    自分にとっては新しい発想につながったので、
    とても参考になりました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません