- ベストアンサー
現在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で取得できるように したいのですが何か方法はないでしょうか?
- みんなの回答 (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相当の文字列が得られます。
その他の回答 (1)
- mtaka2
- ベストアンサー率73% (867/1179)
SCRIPT_NAME ではなく、REQUEST_URI を参照するようにしてください。 SCRIPT_NAME は、実行しているプログラム名が入っていますが、 REQUEST_URI には、実際にアクセスしているURLのパス部分が入っています。
補足
すいません REQUEST_URIではPATH_INFOなどの場合に末端のパスの拡張子になります つまり /test/aaaa/bbbb.php とか疑似している場合にはbbbb.phpを取得してしまいます。 この場合も実行ファイル test の部分を取得したいのです /test/aaaa/bbbb.php ならOK /test.php/aaaa/bbbb.php ならNGにしたいのですが 何かいい方法はないでしょうか?
お礼
ありがとうございました、解決しました。
補足
しかし、日本語エンコード文字がURLに含まれている場合 $_SERVER[REQUEST_URI]はそのまま取得するに対し $_SERVER[PATH_INFO]は日本語として取得するようです この場合$_SERVER[PATH_INFO]の日本語の部分のみをエンコードする 必要があるのですが、何かスマートな方法はないでしょうか? 別のサーバー(CGI版のPHP)ではSCRIPT_NAMEで拡張子有り無しをそのまま 返してくれます、何か設定はあるのでしょうか?