2017-05-12 5 views
-4

私はPHPを使用して、私の現在のページのURLの深さ(または自宅からのディレクトリの数)をエコーし​​たいと思います。どうすればいい?例えばは、どのように私はPHPを使用してURLの深さを得るのですか?

、私はmysite.com上だ場合、出力ディスプレイ「0」、私はmysite.com/recipes、出力を表示し、「1」にしていた場合、私はmysite.com上だ場合/レシピ/パイ、出力には「2」などが表示されます。

私はそれをどのように行うのですか?

私はそれを簡素化し、これをやってみましたが、それは0としてエクスポートします:

$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 
echo $folder_depth; 
+0

'/'の前に '?'のカウント数はありますか? –

答えて

0

あなたは、クエリ文字列を持っていない場合は、/で爆発することができます。それは、あなたのURLの前にその缶混乱を//://またはhttps:あなたは、クエリ文字列を持つことになります場合は、HTTPを使用している場合、あなたは、このような

$url = preg_replace('/?.*$/','',$url); 

...として、その最初を削除する必要がありますまた、だから、

$url = preg_replace('~^https*://~','',$url); 

さて、あなただけexample.com/some/path/to/somethingとしてURLを持っている...それを削除します。 $の大きさは、あなたが望むものよりも1以上になります

$a = explode('/',$url); 

:あなたは上の爆発/カウントを得ることができます。だから、あなたは1減算する必要があります。

$深さ=はsizeofを($ A)-1; example.com/links.htmlだけではなく0だから、1のように出てくるような

新たな問題が...私はちょうど爆発する前に、私は、ファイル名を取り除く必要があり、ファイル自体を数えます。しかし...それがファイルかディレクトリかどうか私はどのように知っていますか?これはURLの仕様に組み込まれていません。例えば、example.com/testは、ファイルをすることができたり、それは(と、それが自動的にexample.com/test/index.htmlに行く)ディレクトリである可能性があります。

ちょうど楽しみのために、ここで一緒にPHPの parse_url()とその PHP_URL_PATH戻り値を使用して、私の安価でcheezyソリューションです
$url = preg_replace('~/[^/]+.(html|php|gig|png|mp3)$~','',$url); 
+0

'parse_url()'を使ってパス上の数学演算を行うこともできませんでしたか? –

+0

@JayBlanchardはい、もしあなたが正規表現の楽しさのない退屈なやり方をしたいのなら、そうです。 – kainaw

+0

¯\\ _(ツ)_ /¯heh! –

1

:あなたはあなたのような、爆発する前にあなたが持っていると、それらのファイルを削除しますどのファイル拡張子を前提とする必要がありますその他の機能のカップル:

$url = 'http://universeofscifi.com/content/tagged/model/battlestar_galactica.html'; 
echo var_dump(parse_url($url, PHP_URL_PATH)); 
echo count(explode('/', (parse_url($url, PHP_URL_PATH)))) - 2; 

これが返されます。

string(47) "/content/tagged/model/battlestar_galactica.html" 
3 

私は番目のドメインを破棄するようにカウントから2を引きますeフロントとファイルを最後に置き、ディレクトリの深さのカウントだけを残します。

0

@kainaw、私はあなたの答えが好き!ありがとう!

私はその上にスピンがかかりました。まず、必要なURLの一部を取得するために間違ったPHP関数を使用していたことに気付きました。次に、@ kaniawの例を使って、私が数えるはずのURLの部分を取得し、他の部分は無視する必要がありました。

また、 "/"の間の内容のないURLを考慮しなければならなかったので、/ word ////は1として数えられます。したがって、空でないexplode()の後に配列要素を数えました。私はそれらを見ていなかったが、彼らは上記されたので、私はそれらのラインの一部をコメントアウト

$url = $_SERVER['REQUEST_URI']; 
//echo "*".$_SERVER['REQUEST_URI']."*"; 
//$url = preg_replace('/?.*$/','',$url); 
//$url = preg_replace('~^https*://~','',$url); 
//$url = preg_replace('~/[^/]+.(html|php|gig|png|mp3)$~','',$url); 
$a = explode('/',$url); 

$depth =count(array_filter($a)); 
echo $depth; 

は、ここに私のコードです。

ありがとうございます!

関連する問題