サーバ変数について
サーバ変数とは
サーバ変数とはサーバが生成する変数です。サーバはヘッダやパス・スクリプトの位置などいろいろな情報を持っていますが、そのサーバの情報にアクセスできる変数だと思って下さい。「ブラウザ情報」だとか「IPアドレス」だとかもこのサーバ変数で取得できます。この変数1つで取得できちゃうので、よくある「あなたのお使いのブラウザは○○です」なんて表示も1行スクリプトで済ませられちゃいます。
そういう便利なサーバ変数ですが、この情報にアクセスするためには$_SERVERという連想配列を使います。連想配列なのでもちろんキーが必要です。どんなキーを指定したらいいか解説する前に注意点があります。サーバ変数は、サーバが生成する情報にアクセスするので、どんな値にアクセスできるかはサーバに依存します。つまり、それぞれの環境によって使えるキーと使えないキーがあるという事です。
自分の環境ではどんなサーバ変数が使えるかを把握しておかないと、いざスクリプトを組む時も、誰かのスクリプトをもらってくる時も「書いてある通りにやったのに動かない~~!!」というような事になりかねません
$_SERVER自体はPHPに予め定義されている変数です。他にもいろいろな定義済み変数が存在しますが、今回はサーバ変数に限って話を進めます。その他の定義済み変数は以下をご覧下さい。
さらに、サーバ変数「$_SERVER」はスーパーグローバル、つまり全てのスコープで利用可能です。関数内に記述する時でもglobal宣言をする必要はありません。
ただし、$_SERVERがPHPに追加されたのはPHP4.1.0からです。それ以前のバージョンでは「$HTTP_SERVER_VARS」という変数を使用しますが、この変数はスーパーグローバルではありませんのでglobal宣言が必要になります。PHPは$_SERVERと$HTTP_SERVER_VARSを別の変数として扱います。PHP5以降では「register_long_arrays」という設定値がOFFであれば$HTTP_SERVER_VARSは使えません。
使用可能なサーバ変数の見方
まず、自分がどんなサーバ変数を使えるか知りたい時はこんなスクリプトを実行してみてください。
サンプルスクリプトタイトル
- foreach($_SERVER as $server_key => $server_val){
- echo $server_key."<br />\n";
- }
いろいろな値が表示されたはずですが、それが今の環境で使えるサーバ変数の一覧です。正確には$_SERVERのキーとして今出力された値を使います。つまり、
- $_SERVER['PHP_SELF'];
などのようにして使います。
ついでですが、このスクリプトに$server_valを追加で出力すればそのサーバ変数に今どんな値が入ってるかを知る事ができます。※値がさらに配列となっている場合もあります。
注意しておきますが、レンタルサーバなどを使用している方は自分がテスト用にローカルで動かしてるサーバと実際にホームページを置いてるサーバが違うっていうのを忘れないで下さい。ローカルでは使えるサーバ変数でも、レンタルサーバなどの設定によって使えないサーバ変数もあるかもしれません。ウェブサイトを置いているサーバにUPして確認してみてくださいね。
それぞれのサーバ変数がどんな意味を持つのかはこれからやりますので、出力された値にあんまり悩まないで下さい。サーバ変数がどのようなものか分かれば結構ですし、全てのサーバ変数を覚える必要はありません。代表的なものを覚えておけば大体の処理では困りません。
register_globalsによる違い
PHP4.2.0以降、PHPの設定(php.ini)で「register_globals」という値のデフォルト値が「OFF」に変更されました。この設定がONになっていれば、$_SERVERではなく、上記で出力した値に$をつけて変数とすればそれぞれの値が取得できます。
例えば$_SERVER['PHP_SELF]ではなく、単に$PHP_SELFとすれば使えます。
とても便利なのですが、register_globalsがOFFになったのはセキュリティ上の理由によるらしいです。旧バージョンとの互換性を考えてregister_globalsの値をONとしてくれているサーバも存在しますが、セキュリティ上とても危険だという事なので、ご自分で設定できる場合はデフォルト値のOFFとしておいて、ちゃんと$_SERVER['PHP_SELF']などとしてサーバ変数を使うのをお勧めします。
register_globalsの値はphpinfo()などで確認できますので、確認しておいて下さい。phpinfo()で出力される情報の「Configuration」に載ってるはずです。
次回で代表的なサーバ変数を使い方と解説つきで紹介していきますのでよろしくお願いします。





