2010-11-18 7 views
5

は、私がこのようなURLがあるとしましょう:PHP URLパスから引数を取る

http://www.mysite.com/forum/board1/sub-forum/topics/123

PHP(htaccessファイルを使用することはできません)、そのURLを取り、board1を抽出するために、sub-forumで簡単な方法はあります、 topics123だから私はそれらをデータベースなどで使うことができますか?組み込み関数がありますか、自分で作成する必要がありますか?

おかげで、

ジェームズ

答えて

10
explode('/', getenv('REQUEST_URI')); 

ご使用の環境が上記の値でクエリ文字列の一部を含む場合は、ここできちんと回避策はあります:

explode('/', strtok(getenv('REQUEST_URI'), '?')); 
+1

ありがとう:-)それは自分自身のことを考えていたはずです - 非常に簡単です! – Bojangles

+1

クエリ文字列はどうですか? – Gumbo

+0

@Gumboそれは要件ではありませんでした。この配列を$ _GETとマージすることも難しくありません。 – pestaa

1

すでに設定している場合あなたのWebサーバーが特定のPHPファイルにそれらの要求を送信するには、parse_urlexplodeを使用して要求を取得して分割することができますURIパスをセグメントに追加します:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$pathSegments = explode('/', $_SERVER['REQUEST_URI_PATH']); 
3

リダイレクトリクエストはありませんが、Webサーバーは存在しないパスに対して404エラーを返します。

しかし、http://your.site.com/index.php/foo/bar/bazのようなURLを使用し、urlを@pestaaのような部分に分割して、パラメータ値を解析することができます。

+0

まあ、パスは仮想です - データベースから取り出して構築しています。そのパスに移動すると404が返されますが、PHPはまだ実行されていますか? – Bojangles

+0

いいえ、あなたのWebサーバがすべてのURLをPHPスクリプトにリダイレクトする必要があることを知っていない限り、ファイルシステム上の対応するパスを調べ、存在しない場合は404エラーを返します。 –

+0

ああ、ありがとう。私は解決策は、HTAccessファイルを使用することですか?私はmod_rewriteのルールを編集できるかもしれませんが、それにはカウントしません。 – Bojangles

2

これは、リンクは分で古くなっ私のMVC http://www.phpclasses.org/package/6363-PHP-Implements-the-MVC-design-pattern.html

から取得され、それがでMVCのものを持っていないので、私はそれを更新したが、これはgetLoadDetails($ _ URL)を呼び出すことができます; amd $ _URLは、フォルダパスからデータを取得する以外は、$ _GETとまったく同じになります。

function getLoadDetails(&$_URL){ 
      $filePath = $_SERVER['REQUEST_URI']; 
      $filePath = explode("/", $filePath); 

      for($i = 0; $i < count($filePath); $i++){ 
        $key = $filePath[$i]; 
        $i++; 
        $val = $filePath[$i]; 
        $keyName = urldecode($key); 
        $_URL[$keyName] = urldecode($val); 
      } 
    } 

あなたがあなたのシステムがゴミ箱するすべてのURLのフォルダパスとインデックスファイルを作成しようとしている私に教えていけないしてくださいフォルダパスへの対応を計画んかhtaccessファイルを使用するカント場合、私は、一つの質問を持っていますあなたのサーバーのスピードとあなたのホストはそれのためにあなたを憎むでしょう。

+0

いいえいいえ - それは最も気違いでしょう!すべてのディレクトリを作成するだけで気違いです。私が他のコメントで述べたように、私はHTAccessとおそらくmod_rewriteを使用します。ご協力いただきありがとうございます。 – Bojangles

+0

私はちょうど私が頼むだろうが – Barkermn01

関連する問題