PHP - 外部変数

外部変数

フォームが PHP スクリプトに投稿された時、フォームから渡されたすべての変数は PHP により自動的にスクリプトから使用可能となります。

<form action="foo.php" method="post">
    Name: <input type="text" name="name" />
    Mail: <input type="text" name="mail" />
    <input type="submit" name="submit" value="Submit" />
</form>
HTML フォーム

HTML フォームの情報にアクセスする手段は GET や POST が一般的です。

<?php
  echo $_POST['name'];
  echo $_POST['mail'];
?>
HTML フォームのデータにアクセスする

PHP は RFC 6265 に定義された HTTP Cookie を完全にサポートします。Cookie は、リモートブラウザにデータを保持し、再訪するユーザーを追跡し、特定する機構です。setcookie() 関数により Cookie をセットすることができます。Cookie は HTTP ヘッダの一部なので、SetCookie 関数をブラウザに何かを出力する前にコールする必要があります。この制約は header() 関数のものと同じです。Cookie のデータは $_COOKIE のような適当な Cookie データ配列で参照可能です。また $_REQUEST でも参照可能です。

ただし、セキュリティ上の理由により、PHP 7.2.34, 7.3.23, 7.4.11 以降では、外部から入力される Cookie の 名前は url デコードされなくなりました。

単一の Cookie に複数の値を代入したい場合は、配列として代入することが可能です。

<?php
  setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
  setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>
単一の Cookie に複数の値を代入する

通常、PHP はスクリプトに渡された変数の名前を変更しません。しかし、ドットは PHP の変数名で有効な文字ではないことに注意する必要があります。

<?php
  $varname.ext; // 無効な変数名
?>
無効な変数名

上記の例では、パーサは $varname という名前の変数の後に文字列結合演算子 (ドット) があり、その後に文字列 'ext' が続くものとして解釈します。そのため、外部変数に含まれるドットを PHP は自動的にアンダースコアに変換します。

関連記事