$GLOBALS
$GLOBALS — グローバルスコープで使用可能なすべての変数への参照
http://php.net/manual/ja/reserved.variables.globals.php
この$GLOBALS
変数のキーに_SERVER
や_ENV
が登録される時とされない時があります。
auto_globals_jit
これはphp.iniのauto_globals_jitの設定で決定されます。
スクリプト
print_r(array_keys($GLOBALS));
auto_globals_jit=On
の結果
Array
(
[0] => _GET
[1] => _POST
[2] => _COOKIE
[3] => _FILES
[4] => GLOBALS
)
auto_globals_jit=Off
の結果
Array
(
[0] => _GET
[1] => _POST
[2] => _COOKIE
[3] => _SERVER
[4] => _ENV
[5] => _REQUEST
[6] => _FILES
[7] => GLOBALS
)
auto_globals_jit=On
でも$_SERVER
に一度でもアクセスすると登録されます。
$_SERVER; // 値を利用しなくてもよい
print_r(array_keys($GLOBALS));
Array
(
[0] => _GET
[1] => _POST
[2] => _COOKIE
[3] => _FILES
[4] => _SERVER
[5] => GLOBALS
)
まとめ
- php.ini.の設定に関わらず
$GLOBALS['_SERVER']
が存在する事を前提とするなら$GLOBALS
使用の前に$_SERVERにアクセスする。
$_SERVER;
$method = $GLOBALS['_SERVER']['REQUEST_METHOD'];
- パフォーマンス向上のためには
auto_globals_jit=On
にする - ライブラリ開発時の設定は
auto_globals_jit=On
に -
$_REQUEST
対応はPHP5.3以降、その他はPHP5.0以降対応の模様 (ドキュメントにないとの指摘)