電子書籍の厳選無料作品が豊富!

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

A 回答 (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相当の文字列が得られます。

この回答への補足

しかし、日本語エンコード文字がURLに含まれている場合
$_SERVER[REQUEST_URI]はそのまま取得するに対し
$_SERVER[PATH_INFO]は日本語として取得するようです
この場合$_SERVER[PATH_INFO]の日本語の部分のみをエンコードする
必要があるのですが、何かスマートな方法はないでしょうか?

別のサーバー(CGI版のPHP)ではSCRIPT_NAMEで拡張子有り無しをそのまま
返してくれます、何か設定はあるのでしょうか?

補足日時:2010/05/28 11:21
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/26 20:40

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にしたいのですが
何かいい方法はないでしょうか?

補足日時:2010/05/26 18:45
    • good
    • 0

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