dポイントプレゼントキャンペーン実施中!

http://localhost/php/param.php/test
上の様なURL上から、「/」以降の文字の取得をしたいです。
以下の様に作成しましたが、実行結果、何も表示されません。

<?php
$file = basename($_SERVER["PHP_SELF"]);
$url = "http://" . $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI'];
preg_match("/".$file."\/(.+$)/",$url,$match);
$get = $match[1];
print $get;
?>
記述ミスでしょうか?
困っています。教えて下さい。

A 回答 (4件)

http://localhost/php/param.php/test
>上の様なURL上から、「/」以降の文字の取得をしたいです。
/以降って??? 文字通りとらえると /localhost/php/param.php/test になりますけど?
最後の/以降つまり、test のことですか?

それはそれとして、意図がなんであれ、
PHP_SELF = /php/param.php/test
SERVER_NAME = localhost
REQUEST_URI = /php/param.php/test
なので、
>preg_match("/".$file."\/(.+$)/",$url,$match);

preg_match("//php/param.php/test\/(.+$)/","http://localhost/php/param.php/test");
になりますが、これは多分意図と違いますよね。

あと、$が文字列末の意図なら、(.+$)でなく(.+)$です。
    • good
    • 0

http://localhost/php/param.php/test
からpath infoの /test が取得したいと言うことでしょうか
$_SERVER["PATH_INFO"]
で取得できませんか
    • good
    • 0

それぞれの$_SERVERで取ってくる値がどうなっているのかの


問題な気がします。

それぞれ固定値で実験してみた結果
$file = "param.php";
$url = "http://localhost/php/param.php/test";
preg_match( "/".$file."\/(.+$)/", $url, $match );
print $match[1];
-------------------
test
-------------------
と表示されたので、
やってることは間違えてはいないと思います。

まぁ、シンプルにしようと思ったら

print basename($_SERVER['REQUEST_URI']);

で出来るとは思いますが・・・
    • good
    • 0

ディレクトリ名を除いた実行ファイル名を取得する方法でしたら、


私は、以下のような方法で取得しています。

$get = end(explode("/",$_SERVER["PHP_SELF"]));
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!