フォームが PHP スクリプトに投稿された時、フォームから渡された 全ての変数は PHP により自動的にスクリプトから使用可能となります。 例えば、次のフォームを見てみましょう。
例 7-1. 単なフォーム変数
<form action="foo.php3" method="post"> Name: <input type="text" name="name"><br> <input type="submit"> </form>
投稿された際、PHP は変数 $name を作成します。 この変数の値は、フォーム上で Name: フィールドに 入力されたものとなっています。
PHP は、フォーム変数における配列も解釈しますが、 一次元のみとなります。 この機能は、例えば、関連する変数をグループ化したり、複数の入力値が 選択された際に値を取り出すために使用します。
例 7-2. より複雑なフォーム変数
<form action="array.php" method="post"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br> Beer: <br> <select multiple name="beer[]"> <option value="warthog">Warthog <option value="guinness">Guinness <option value="stuttgarter">Stuttgarter Schwabenbrau </select> <input type="submit"> </form>
track_vars の設定または <?php_track_vars?> 命令により PHP の track_vars 機能がオンにされた場合、POST または GET メソッドにより投稿された変数は、それぞれグローバル連想配列 $HTTP_POST_VARS および $HTTP_GET_VARS よりアクセスできます。
フォームを投稿する際、次のタグのように標準の投稿ボタンの代わりに 画像を使用することができます。
<input type=image src="image.gif" name="sub">
画像のどこかがクリックされた場合、二つの変数 sub_x および sub_y が 付け加えられてこのフォームはサーバーに転送されます。 これらの変数は、ユーザーがこの画像をクリックした座標を示しています。 経験のある人は、ブラウザにより送られた変数の名前においてアンダースコアが ピリオドになってしまっていることに注意するかもしれません。 しかし、PHP はピリオドをアンダースコアに自動的に変換します。
PHP は、 Netscape の規約 に定義されたHTTP クッキーを完全に サポートします。 クッキーは、リモートブラウザにデータを保持し、再訪するユーザーを追跡し、 特定する機構です。 SetCookie 関数によりクッキーをセットすることが できます。クッキーは、HTTP ヘッダの一部なので、 SetCookie 関数をブラウザに何かを出力する前にコールする必要が あります。 この制約は、Header 関数のものと同じです。 クライアントから送られる全てのクッキーは、GET や POST メソッドの データと全く同じように自動的に PHP 変数に変換されます。
単一のクッキーに複数の値を代入したい場合は、 [] をクッキー名に付けてください。 以下に例を示します。
SetCookie ("MyCookie[]", "Testing", time()+3600);
クッキーは、パスまたはドメインが異ならない限り、 以前のクッキーをブラウザ上の同じ名前の変数に置き換えることに 注意してください。 さて、買い物篭(Shopping Cart) プログラムの場合、カウンタを保持し、 受け渡したいと思うかもしれません。 これは、次のようになります。
例 7-3. SetCookie の例
$Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600);
PHP は、環境変数を自動的に通常の PHP 変数として使用可能とします。
echo $HOME; /* 環境変数 HOME が設定されている場合、表示します。 */
情報は、GET、POST、Cookie からも自動的に来るため、 意図した種類の変数を確実に得るために環境変数から変数を明示的に 取得する方が好ましいということが時々あります。 getenv 関数をこのために使用することができます。 環境変数を putenv 関数でセットすることもできます。
通常、PHP はスクリプトに渡された変数の名前を変更しません。 しかし、ドット(ピリオド、終止符)はPHPの変数名で有効な文字ではないということに 注意する必要があります。次の例を見てみましょう。
$varname.ext; /* 無効な変数名 */ここで、パーサは、 $varname という名前の変数の後に文字列結合演算子があり、 その後に、裸の文字列(すなわち、既知のキーまたは予約語にマッチしない 引用符無しの文字列) 'ext' が続くとして解釈します。この場合、明らかに 意図する結果にはなりません。
重要なことを記述しておくと、このため、外部変数に含まれるドットを PHP は自動的に アンダースコアに変換します。
PHP は、変数の型を定義し、必要に応じて変換します。 このため、ある変数の型がある時点で常に明らかであるわけではありません。 PHPは、変数の型を調べる複数の関数をサポートしています。 それらは、 gettype, is_long, is_double, is_string, is_array, is_object です。