たまに使うけど毎回忘れるのでメモ。
基本的な取得方法
PHPには$_SERVERという便利なヤツがおりまして、そこにヘッダとかパスとかが入っていますので、それを取り出すことでフォームなどで自分自身に送信するときなんかに利用できます。
つまり、
1 |
$_SERVER['PHP_SELF']; |
とするだけでドキュメントルートからのパス付きで現在のファイル名が取得出来るわけですね。
ファイル名だけを取得したい場合
ところで、パスはいらなくてファイル名のみ欲しい場合はどうしたらいいでしょうか?
これも簡単で、やっぱりPHPには basename というイカした奴がおりまして。
1 |
basename($_SERVER['PHP_SELF']); |
とするとあら不思議。
パスを取り除いた自分自身のファイル名のみが取得出来るのでした。
どんな時に使いたかったのかというと、こんなかんじでドロップダウンリストを使ったナビゲーションを生成したいときに、自分自身のページが出ていたらそこを選択済みにしておきたかったのです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $cs_pages = array( array( 'title' => 'ページ1', 'href' => 'foo.php' ), array( 'title' => 'ページ2', 'href' => 'bar.php' ), ); ?> <select name="ts" id="ts_select" onChange="location.href=value;"> <?php $self_name = basename($_SERVER['PHP_SELF']); foreach($cs_pages as $p):?> <option value="<?php echo $p['href']; ?>"<?php if ($p['href'] == $self_name) echo ' selected="selected"'; ?>><?php echo $p['title']; ?></option> <?php endforeach; ?> </select> |
日本語のファイル名は(今は)うまく動かない
basename は便利なヤツですが、なんとマルチバイトが扱えないというバグが有り、
ファイル名が日本語だと正しく動作しないようです。
ただし、次期バージョンのPHP6では修正されるんだとか。
PHP6はかなりリリースがのびのびになってるようですし、レンタルサーバーなんかの場合は勝手にバージョンアップはできませんので、この恩恵を受けられるようになるのはまだ当分先かもしれませんけれど…。
[PHP] basename関数の日本語が消されてしまうバグは、PHP6では修正されている|成長の果実
__FILE__