PHP PHP_SELFとSCRIPT_NAMEを比較してみた
スポンサーリンク
このドキュメントの内容は、以下の通りです。
はじめに
PHPの定義済の変数に サーバ変数 $_SERVER があります。これで、スクリプト名を取得したり、クエリストリングを取得したり、リファラ、ユーザエージェントといったものが色々取得できます。PHPのスクリプト名を取得するのに、$_SERVERのPHP_SELFやSCRIPT_NAMEを使ったりするわけですが、なんで同じものがあるのでしょう?
** PHP_SELF:とは
PHP_SELFに関するPHPのドキュメントからの抜粋です。
現在実行しているスクリプトのファイル名です。ドキュメントルートから取
得されます。例えば、http://example.com/test.php/foo.bar というアドレ
ス上にあるスクリプトでは $_SERVER['PHP_SELF'] は /test.php/foo.bar
となります。 __FILE__ 定数には、カレント(すなわち読み込まれた)ファイ
ルのパスとファイル名が含まれます。 PHP がコマンドラインから実行される場
合、PHP 4.3.0 以降、この変数にはスクリプト名が含まれます。これより前
のバージョンでは、この変数は使用できません。
SCRIPT_NAMEとは
SCRIPT_NAMEに関するPHPのドキュメントからの抜粋です。
現在のスクリプトのパス。スクリプト自身のページを指定するのに有用です。
__FILE__ 定数には、カレント(すなわち読み込まれた)ファイルのパスとフ
ァイル名が含まれます。
PHP_SELF とSCRIPT_NAMEの値を確認する
PHP_SELF とSCRIPT_NAMEの違いを確認するために、 以下のサンプルコードを検証してみます。<?php var_dump($_SERVER['PHP_SELF']); echo '<br />'; var_dump($_SERVER['SCRIPT_NAME']); echo '<br />'; ?>
http://foo.bar.com/dev/php/SCRIPT_NAME.php
にアクセスしてみると以下の結果が得られました。
string(24) "/dev/php/SCRIPT_NAME.php" string(24) "/dev/php/SCRIPT_NAME.php"
同じ値が取得できました。
それでは、以下のリクエストを試してみます。
http://foo.bar.com/dev/php/SCRIPT_NAME.php/
string(25) "/dev/php/SCRIPT_NAME.php/" string(24) "/dev/php/SCRIPT_NAME.php"
PHP_SELF は、 最後に / がついています。
今度は、さらに URI に文字を足してみます。
http://foo.bar.com/dev/php/SCRIPT_NAME.php/a/b/c
string(30) "/dev/php/SCRIPT_NAME.php/a/b/c" string(24) "/dev/php/SCRIPT_NAME.php"
PHP_SELF は、 PHP のスクリプトファイル以降の文字列がそのままわたっています。
SCRIPT_NAME は、スクリプトのパスしか入っていません。
それは、さらに日本語の文字列も追加してみました。
http://foo.bar.com/dev/php/SCRIPT_NAME.php/a/b/%83e%83X%83g
%83e%83X%83gは、「テスト」
string(35) "/dev/php/SCRIPT_NAME.php/a/b/テスト" string(24) "/dev/php/SCRIPT_NAME.php"
こんな感じです。
以下のURLで検証します。
http://foo.bar.com/dev/php/SCRIPT_NAME.php/%20/%20/
%20 は、URLエンコードでスペースのことです。
string(29) "/dev/php/SCRIPT_NAME.php/ / /" string(24) "/dev/php/SCRIPT_NAME.php"
PHP_SELF は、URI が全部入ってきます。
さいごに
サーバ変数$_SERVERの PHP_SELFとSCRIPT_NAMEには、上記のような違いがありますので、注意しましょう。PHP関連記事
[2008-01-30-2] PHP パフォーマンス empty()と比較演算子==と===のスピード差[2008-01-29-2] PHPパフォーマンスベンチマーク 後置加算・後置減算($i++, $i--)より前置加算・前置減算(++$i, --$i)が高速
[2008-01-28-2] パフォーマンスのためにPHPのfor文でcountを使うべきではない
[2008-01-28-1] PHP pearのBenchmarkをportsからインストールする
[2008-01-27-2] PHPのオブジェクトの疑似変数$thisをイテレーション
[2008-01-27-1] PHPのオブジェクトのイテレーション
[2008-01-26-2] PHPの不要なモジュールを外してapacheのメモリを減らす方法
[2008-01-21-1] vimでPHPのsetter/getterを適当に置換で作る方法
[2008-01-20-3] PHPのarray_key_existsとissetの違いと注意点
[2008-01-20-2] PHP デザインパターン Iteratorパターン
[2008-01-17-2] PHP config.phpへの不正アクセス
[2007-12-25-2] vim用のPHPの関数辞書ファイル作成方法
[2007-12-24-2] PHPでunix timestampをMySQLのDATETIMEに変換する方法
[2007-12-15-4] PHPのExceptionの種類
[2007-11-18-4] PHPで変数の文字コードを変換する方法
[2007-11-17-2] PHPの文法チェック(syntax)をチェックするスクリプト
[2007-11-10-2] 携帯メールアドレスをチェックする方法
PHPに関する書籍を探す
参照しているページ (サイト内): [2013-02-06-1] [2008-01-31-2]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12