PHPの外部から来る変数

HTML フォーム (GET と POST)

フォームが PHP スクリプトに投稿された時、フォームから渡された全て の変数は PHP により自動的にスクリプトから使用可能となります。 設定オプションtrack_vars がオンの場合、これらの変数は、変数のソースに応じて連想配列 $HTTP_POST_VARS, $HTTP_GET_VARS, かつ/または $HTTP_POST_FILES に代入されます。

これらの変数に関する詳細については、定義済の変数を参照 下さい。

例 7-1単純なフォーム変数

<form action="foo.php" method="post">
    Name: <input type="text" name="username"><br>
    <input type="submit">
</form>

上のフォームが投稿された際、text inputで入力された値は、 $HTTP_POST_VARS['username']で利用可能となります。 register_globals 設定ディレクティブがonの場合、この変数はグローバルスコープで $username として利用可能となります。

注意 magic_quotes_gpcの設定 はGET、POSTそしてCookieの値に影響します。onになっていると (It's "PHP!") という値は自動的に (It\'s \"PHP!\") となり、DBへの挿入時の エスケープが不要になります。addslashes()stripslashes()そしてmagic_quotes_sybaseも 参照してください。

PHPではフォーム変数のコンテキスト内で配列が使用可能です(FAQの関連箇所も参照してください)。 例えば、関連する変数をグループ化したり、select inputで複数の値を 取得するといったことが可能です。

例 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 Schwabenbr&auml;u
        </select>
    <input type="submit">
</form>

PHP 3では、配列変数は1次元配列に限定されていました。PHP 4ではこの ような制約はありません。

IMAGE SUBMIT 変数名

フォームを投稿する際、次のタグのように標準の投稿ボタンの代わりに 画像を使用することができます。

<input type="image" src="image.gif" name="sub">

画像のどこかがクリックされた場合、二つの変数 sub_x および sub_y が付け加えられてこのフォームはサーバーに転送されます。これらの変 数は、ユーザーがこの画像をクリックした座標を示しています。経験の ある人は、ブラウザにより送られた変数の名前においてアンダースコア がピリオドになってしまっていることを心配するかもしれません。 しかし、PHP はピリオドをアンダースコアに自動的に変換します。

HTTP クッキー

PHP は、Netscape の規約 に定 義されたHTTP クッキーを完全にサポートします。クッキーは、リモート ブラウザにデータを保持し、再訪するユーザーを追跡し、特定する機構 です。SetCookie() 関数によりクッキーをセットす ることができます。クッキーは、HTTP ヘッダの一部なので、SetCookie 関数をブラウザに何かを出力する前にコールする必要があります。 この制約は、header() 関数のものと同じです。 クライアントから送られる全てのクッキーは、GET や POST メソッドの データと全く同じように自勧?に PHP 変数に変換されます。

単一のクッキーに複数の値を代入したい場合は、 [] をクッキー名に付けてください。以下に例を 示します。

setcookie("MyCookie[]", "Testing", time()+3600);

クッキーは、パスまたはドメインが異ならない限り、 以前のクッキーをブラウザ上の同じ名前の変数に置き換えることに 注意してください。 さて、買い牧?(Shopping Cart) プログラムの場合、カウンタを保持し、 受け渡したいと思うかもしれません。 これは、次のようになります。

例 7-3SetCookie()の例

$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() です。