• ベストアンサー

「/」以降の取得について

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; ?> 記述ミスでしょうか? 困っています。教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4852/10267)
回答No.1

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"); になりますが、これは多分意図と違いますよね。 あと、$が文字列末の意図なら、(.+$)でなく(.+)$です。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

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

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

それぞれの$_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']); で出来るとは思いますが・・・

全文を見る
すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (742/5653)
回答No.2

ディレクトリ名を除いた実行ファイル名を取得する方法でしたら、 私は、以下のような方法で取得しています。 $get = end(explode("/",$_SERVER["PHP_SELF"]));

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mod_rewrite的なことをphpで実現させたいが空白ページが表示されてしまう

    www.example.com/ほげほげ にアクセスされたら、 example.com/ほげほげ へ urlをかきかえ、 さらに、 $_SERVER["REQUEST_URI"] がスラッシュで終わる(2個以上のスラッシュも考慮)ときは、これらのスラッシュをとりのぞいたurlへかきかえ、 そして、このurlへ301ステータスコードでリダイレクトさせる(ただし、get methodの場合に限る) というコードをphpで書いたのですが、 なぜか、urlは書き換わらず、空白のページが表示されてしまいます。 どこがいけないのでしょうか? お助けくださいませ。         if ($_SERVER["REQUEST_METHOD"] == "GET"){             #HTTP_HOST (exclude www.)             preg_match_all("/^(www\.)(.*)$/", $_SERVER["HTTP_HOST"],$matches_HTTP_HOST);             if ($matches_HTTP_HOST[1] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_HTTP_HOST = $matches_HTTP_HOST[2];             }             else{                 $strAfterRedirect_HTTP_HOST = $_SERVER["HTTP_HOST"]             }             #REQUEST_URI (,which includes query string)             preg_match_all("/^(\/)(.*)(\/+)$/", $_SERVER["REQUEST_URI"],$matches_REQUEST_URI);             if ($matches_REQUEST_URI[3] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_Request_URI = $matches_REQUEST_URI[1] . $matches_REQUEST_URI[2];             }             else{                 $strAfterRedirect_Request_URI = $_SERVER["REQUEST_URI"];             }             #redirect with 301 status code if needed             if($bWillBeRedirected){                 #Protocol                 if ($_SERVER["HTTPS"] == "on"){                     $strProtocol = "https";                 }                 else{                     $strProtocol = "http";                 }                 $url = $strProtocol . "://" . $strAfterRedirect_HTTP_HOST . $strAfterRedirect_Request_URI;                                                   header("HTTP/1.1 301 Moved Permanently");                 hearder(”Location: “.$url);                 header(”Connection: close”);             }         }

    • ベストアンサー
    • PHP
  • ハッシュマーク以降のアドレス取得

    PHPで自身のURLのうちハッシュマーク以降を取得できません。 $_SERVER["REQUEST_URI"]でもハッシュマーク以降は無視されてしまいます。 どうやらサーバ変数では読み取れないようです。 何か他に方法はないでしょうか。

    • ベストアンサー
    • PHP
  • 正規表現

    正規表現に疎いので質問させてください。 $param = ereg_replace('/?$', '', $_SERVER['REQUEST_URI']); これをpreg_matchで書くとどうなりますか? よろしくお願い致します。

    • 締切済み
    • PHP
  • empty($_SERVER['REQUEST_U

    empty($_SERVER['REQUEST_URI'])とは、何のことでしょうか? 下記スクリプトの意味について教えてください。 // // Fix unavailable $_SERVER['REQUEST_URI'] on IIS // if ( empty($_SERVER['REQUEST_URI']) ) {  $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];  $_SERVER['REQUEST_URI'] .= ( !empty($_SERVER['QUERY_STRING']) ) ? '?'.$_SERVER['QUERY_STRING'] : ''; } ▼if ( empty($_SERVER['REQUEST_URI']) ) { $_SERVER['REQUEST_URI']が空だったら、の意味が分かりません。 ページにアクセスするためのURIを指定しなかったら? それは、どんな状況なのでしょうか? ▼$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF']; $_SERVER['REQUEST_URI']に、現在実行しているスクリプトのファイル名を利用。これは、何をしているのでしょうか? ▼$_SERVER['REQUEST_URI'] .= ( !empty($_SERVER['QUERY_STRING']) ) ? '?'.$_SERVER['QUERY_STRING'] : ''; クエリ情報(URLの"?"以降の文字列)が空でなければ、クエリ情報をくっつける。空だったら、くっつけない 結局、このスクリプトでは何をしようとしているのでしょうか? また、このスクリプトがないと、どういう不具合が起きる可能性があると、想定されるでしょうか? 検索してみたら、下記のようなページがあったのですが、 IIS(サーバ?)固有の不具合回避対策なのでしょうか? ▽Dokeos Forum • View topic - IIS $_SERVER['REQUEST_URI']   http://www.dokeos.com/forum/viewtopic.php?t=8335

    • ベストアンサー
    • PHP
  • PHPでWebページの特定部を取得したいのですが、上手くいきません。

    PHPでWebページの特定部を取得したいのですが、上手くいきません。 現在file_get_contentsを用いてURLを指定して取得し、preg_matchの引数にする方法で行っています。 また、preg_matchは以下のように用いています。 preg_match("/パターン(.*?)パターン/s", $html, $matches); print_rで$matchesを表示してみたところArray()のみ出力されます。 また、話が逸れて申し訳ないですが、上記とは別にfile_get_contentsを用いて動的にURLを指定して取得しているのですが、処理に時間がかかります。(約10秒) $wordをURLに組み込む変数として以下のように記述しています。 file_get_contents("http://…".$word."…(URLの続き)"); 以上の2点についてご教示願います。

    • ベストアンサー
    • PHP
  • 簡単な正規表現ではまってます。お助けを・・・

    簡単な正規表現ではまってます。お助けを・・・ PHP5.1.6です。 アクセスされたURLの最後にハンカクスラッシュがあった場合、これを削り取って、 新しいURLへ、301のステータスコードでリダイレクトさせたいと思ってます。 で、以下のようなスクリプトを書いたのですが。。。 $this->sPattern = "/(.*)\/$/"; $_SERVER['REQUEST_URI'] = preg_replace($this->sPattern, $1, $_SERVER['REQUEST_URI']); $this->bReturn301StatusCode = true; Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /var/www/_include/class/uri.class on line 54 といわれてしまいます。 なお、54行目は、 $_SERVER['REQUEST_URI'] = preg_replace($this->sPattern, $1, $_SERVER['REQUEST_URI']); の行です。 エラーメッセージで検索したのですが、分からず。。。 どこが間違っているのでしょうか? 教えていただければ幸いです。 以上、よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • GETを使ったサーバとのセッションが理解できません

    今、phpの勉強を本を見ながらやっていますが良く理解出来ません。 諸兄のご指導を宜しくお願い致します。 <html><head><title>00000000</title></head> <body> <?php echo "今GETで渡したのは".$_GET['name']."です"; ?> </body></html> 上のようなスクリプトを書いて、「get_test」という名前のファイルで保存して、 「http://localhost/test/get_test.php」とURLに打ち込み、 「http://localhost/test/get_test.php?name=test」にアクセスすると 「今GETで渡したのはtestです」と表示されましたが、これはどういう意味でしょうか。 ユーザーの持っているファイルは上側で、サーバーの持っているファイルからレスポンスが来たということでしょうか。それならサーバーからレスポンスの来たファイルの名前をどのような名前になっているのでしょうか。 それとも両方ともサーバーが持っているのでしょうか。

    • ベストアンサー
    • PHP
  • PHPで<title>タグ取得の動作が非常に重い

    PHPで<title>タグ取得の動作が非常に重い $html = file_get_contents($url); if(preg_match( "/<title>(.*?)<\/title>/i", $html, $match)) { } 上記のような方法で一度に(1ページ内で)30サイトほどの<title>タグを取得すると、不可がかかり、表示までにかなり時間がかかってしまいます。 preg_match では重いのでしょうか。 それとも一度に30サイトはそもそも無理があるのでしょうか。。

    • ベストアンサー
    • PHP
  • PHPでのURL取得とブックマークについて

    お世話様になります。 現在[hoge.php]ページ内の<iframe>タグに[.html]ページをPHPプログラムでランダムに読み込んでいます。 (例)、 [hoge.php]に[A.html]が読み込まれた [hoge.php]に[B.html]が読み込まれた [hoge.php]に[C.html]が読み込まれた つまり上記の様になりますが、例えば『[hoge.php]に[B.html]が読み込まれた』という状態をPHPを使ってURL取得するにはどの様なプログラムを書けば宜しいでしょうか?また、この状態をブックマークさせる方法は有るでしょうか? 一応、今は現在のページURLを取得する方法として <? print("http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); ?> という記述のみ使っています。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 【PHP】ファイル名を取得して拡張子変更で実行

    sample.phpというphpファイル内で、同ディレクトリにあるsample.txtを読みこませたいのですが、上手くいきません。 <?php $bn = basename($_SERVER['PHP_SELF'], ".php"); ?> で$bnに、sampleという名前を取得させるところまではできましたが <?php require($bn.txt); ?> という式では上手くいかないのです…。 <a href="<?php print $bn ?>.txt">リンク名</a>は成功したので、おしいところまで行ってるのではないかと思うのですが。 ファイル名を取得して任意の拡張子をくっつけて実行するような数式がありましたら教えてください。よろしくお願いします。