• ベストアンサー

現在Multiviewsの設定にてphpが拡張子有りでも無しでも動作し

現在Multiviewsの設定にてphpが拡張子有りでも無しでも動作します 仮に実行ファイルをtest.phpとしますとtest.phpでもtestでも動作するわけですが そのtest.php中で$_SERVER['SCRIPT_NAME']で取得した場合に test.phpでもtestでも拡張子の付いたtest.phpで取得されます これをtest.phpだったらtest.php、testだったらtestで取得できるように したいのですが何か方法はないでしょうか?

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

> REQUEST_URIではPATH_INFOなどの場合に末端のパスの拡張子になります それなら、REQUEST_URIからPATH_INFOを取り除けばよいでしょう。 $r = $_SERVER[REQUEST_URI]; $p = $_SERVER[PATH_INFO]; if (substr($r, strlen($r)-strlen($p), strlen($p)) === $p) { $r = substr($r, 0, strlen($r)-strlen($p)); } echo "$r\n"; で、実URLをベースにしたSCRIPT_NAME相当の文字列が得られます。

bigin888
質問者

お礼

ありがとうございました、解決しました。

bigin888
質問者

補足

しかし、日本語エンコード文字がURLに含まれている場合 $_SERVER[REQUEST_URI]はそのまま取得するに対し $_SERVER[PATH_INFO]は日本語として取得するようです この場合$_SERVER[PATH_INFO]の日本語の部分のみをエンコードする 必要があるのですが、何かスマートな方法はないでしょうか? 別のサーバー(CGI版のPHP)ではSCRIPT_NAMEで拡張子有り無しをそのまま 返してくれます、何か設定はあるのでしょうか?

その他の回答 (1)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

SCRIPT_NAME ではなく、REQUEST_URI を参照するようにしてください。 SCRIPT_NAME は、実行しているプログラム名が入っていますが、 REQUEST_URI には、実際にアクセスしているURLのパス部分が入っています。

bigin888
質問者

補足

すいません REQUEST_URIではPATH_INFOなどの場合に末端のパスの拡張子になります つまり /test/aaaa/bbbb.php とか疑似している場合にはbbbb.phpを取得してしまいます。 この場合も実行ファイル test の部分を取得したいのです /test/aaaa/bbbb.php ならOK /test.php/aaaa/bbbb.php ならNGにしたいのですが 何かいい方法はないでしょうか?

関連するQ&A

専門家に質問してみよう