スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

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に関する書籍を探す


  • PHP をアマゾンで探す
  • PHP を楽天で探す
  • PHP をヤフーショッピングで探す

参照しているページ (サイト内): [2013-02-06-1] [2008-01-31-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 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

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー