スーパーグローバル変数は、グローバルなアプリケーションの状態やHTTP通信を渡すために使用されます。
これらの変数の主な利点は、いつでもどこでも利用可能であることです。実際には、インデックスによって特定の情報にアクセスする、値の配列である。異なる文脈では、鍵の利用可能性は異なる場合がある(以下に説明)。
PHP のスーパーグローバルはすべて配列で、ドル記号の後にアンダースコア ($GLOBALS
以外) と大文字を続けたもので表されます。
PHP 7`では、特に次のようなものがあります。
変数名|説明 |
---|
$_GET | GETメソッドで送られるURLパラメータ </a |
$_POST | フォームデータ sent by POST を送信します。ajaxでは動作が異なる場合があることに注意してください。 |
$_REQUEST |任意のメソッド ($_GET , $_POST , $_REQUEST ) で送信されたフォームデータ。 |
例えば <input type="file"> のような構成で、現在アップロードされているファイルに関する技術的な情報を提供します。 |
$_SERVER` |
$_COOKIE |
$_SESSION | セッションデータ (session) が存在し、過去に設定されていた場合。 |
$GLOBALS |
$_ENV | PHP が動作している現在の環境についての情報。 |
既存の値をすべてリストアップするのは簡単です。
foreach ($_SERVER as $key => $value {echo $key . ':' . $value . '<br>。';}
注意: すべてのインデックスが常に存在しなければならないわけではありません (たとえば、スクリプトがCLIモードでcronを実行した場合、ページのURLやリクエストのIPアドレスを持つインデックスは存在しません)。
すべてのグローバル変数($_SESSION
を除く)は読み取り専用にすることをお勧めします。これは、グローバルなアプリケーションデータを含んでおり、他のコードがこれを考慮する可能性があるためです(例えば、インストールされた別のライブラリなど)。
グローバルステートのもう一つの欠点は、たとえ存在しても正確な値に頼れないことです。そのため、常に isset()
構造体でそのキーをチェックしなければなりません。
新しいクッキーを保存するには setcookie()
を使用し、値を直接挿入しないでください。これは、読み取り専用であるためです。
スーパーグローバル変数の値を盲目的に信用してはいけない!
ユーザーはURLと送信されるヘッダーを使用して、値がどのように設定されるかに影響を与えることができます。すべての入力は、常に慎重に検証されなければならない。
古いバージョンの PHP (5.4.0
まで) では、特別な register-globals
ディレクティブ (php.ini
で設定可能) があり、URL で渡されたすべてのパラメータを自動的に変数として登録するようになっていました。
例えば、こんな感じです。
あるユーザーが URL: https://example.com/script.php?var=24
に到着した。
そして、PHPは自動的にスクリプト内に $var
という変数に 24
という値を作成します。
だから、古典的にうまくいったのです。
echo $var;
そのため、誰でも好きな変数をスクリプトに入れ、その内容を変更することができる。もちろん、セキュリティは常に優先されるものではありませんでした。そうでもないんです。
より詳しい説明は、公式マニュアルをご覧ください。
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | ja