phpの条件分岐で1階層目のディレクトリを判別したいです。

サンプルなどありましたらお願いします。

http://test.com/hoge/aaa/a.html
http://test.com/fuga/aaa/b.html
http://test.com/piyo/aaa/c.html
if (最初のディレクトリがhogeだったら){
どうにかする;
}

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2008/09/25 13:46:45
  • 終了:2008/09/25 15:21:26

回答(2件)

id:standard_one No.1

standard_one回答回数252ベストアンサー獲得回数232008/09/25 13:55:39

ポイント60pt

こんな感じでいけるんじゃないかと

$a = explode( '/', $_SERVER('REQUEST_URI') );

if( $a[0] == 'hoge' ) { ... }

http://www.scollabo.com/banban/php/ref/ref_explode.html

id:kanigasuki

できました!

ありがとうございました!

2008/09/25 15:21:19
id:amphisbaena No.2

amphisbaena回答回数131ベストアンサー獲得回数02008/09/25 15:13:58

ポイント10pt
<?php
$url = $_SERVER['REQUEST_URI'];
$url = explode('/', $url);

if ($url[1] == 'hoge') {
	//hogeのときの処理
}
?>

いちおうできるけど・・・

http://q.hatena.ne.jp/1222318003

  • id:kanigasuki
    amphisbaenaさんありがとうございます。
    とても参考になります!
  • id:hard
    上記で答えられている方法だと、
    「http://example.com//hoge/aaa/a.html」
    のように、スラッシュの連続でアクセスされると正しく動作しませんが大丈夫でしょうか?
    explode()後に、配列の各要素をチェックした方が良いと思います。

    <?php
    $first_dir = '';
    $dirs = explode('/', $_SERVER['SCRIPT_NAME']);

    foreach ($dirs as $dir) {
    if ( $dir ) {
    $first_dir = $dir;
    break;
    }
    }

    if ($first_dir == 'hoge') {
    //hogeのときの処理
    }
    ?>
  • id:kanigasuki
    チェックするスクリプトありがとうございます。
    勉強になります。
  • id:standard_one
    なるほどですね。
    動かしてませんが、多分こんなんでも何とかなるかと。
    $a = array_values( array_diff( explode('/', $_SERVER['REQUEST_URI']), array( "" ) ) );
    if( $a[0] == 'hoge' ) { ... }
    こういうコード、あまり好きじゃないですけど。
  • id:tezcello
    > 上記で答えられている方法だと、
    > 「http://example.com//hoge/aaa/a.html」
    > のように、スラッシュの連続でアクセスされると正しく動作しませんが大丈夫でしょうか?
    こういう URI で、a.html に到達出来るんでしょうか? > hard さん

    うちのローカルの環境では、
    http://example.com//hoge/aaa/a.html Not Found
    http://example.com/hoge//aaa/a.html アクセス可
    となりましたが...


    http://example.com//hoge/aaa/a.html でも上手くアクセス出来き、hoge を第一階層とするなら、
    preg_split() であれば、空文字列を返さないオプション PREG_SPLIT_NO_EMPTY とか
    パターン文字列を、|/+| としてやる手もありそうですね。
    preg_match() で、第一階層を抜き出すという方法もありなのでは?
       preg_match('|/+/(.+?)/|', ... こんな感じ
  • id:hard
    > こういう URI で、a.html に到達出来るんでしょうか? > hard さん

    > うちのローカルの環境では、
    > http://example.com//hoge/aaa/a.html Not Found
    > http://example.com/hoge//aaa/a.html アクセス可
    > となりましたが...

    Webサーバソフトによると思いますが、私のapache環境だと、
    連続スラッシュはひとつのスラッシュに置き換えられてファイルにアクセスしますが、
    環境変数の値は複数スラッシュのままになります。
  • id:tezcello
    会社(Apache2.2x)でチョッと試してみました。
    こちらではアクセスに問題ないですね。

    先のテスト環境も Apache 1.3x のハズですが...


    > 連続スラッシュはひとつのスラッシュに置き換えられてファイルにアクセスしますが、
    > 環境変数の値は複数スラッシュのままになります。
    であるなら、連続スラッシュを単独スラッシュとみなすのが、シンプルな感じがします。
    ・先に連続スラッシュを単独スラッシュに置き換えてから、explode()
    ・連続スラッシュでもOKな正規表現で、preg_split() (手前味噌ですが...)
  • id:kanigasuki
    皆さんありがとうございます。PHPは初心者なのでポケットリファレンスみながら感動しています。
    私の環境ではhttp://example.com//hoge/aaa/a.htmlでもアクセスできました。
    hardさんのコードがわかりやすかったので使わさせていただいています。

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

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

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

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