この機能により、テキスト、バイナリファイルの両方をアップロードできるように なります。 PHPの認証機構およびファイル操作関数を用いて、アップロードを許可する ユーザーとアップロード後にそのファイルを使用して行う動作を完全に制御する ことが可能です。
PHP は、全てのRFC-1867対応ブラウザ(Netscape Navigator 3 以上、 MicrosoftからのパッチをあてたMicrosoft Internet Explorer 3または パッチ無しのそれ以降の版を含みます)からファイルのアップロードを 受けることができます。
関係する設定に関する注記: php.iniの file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size, max_input_time ディレクティブも参照ください。
PHPは Netscape Composer および W3Cの Amayaクライアントにより使用される PUTメソッドによるファイルアップロードもサポートしています。詳細は、PUTメソッドのサポート を参照ください。
注意: アップロード用のフォームが enctype="multipart/form-data"属性を有しているかを 確認してください。さもないと、ファイルのアップロードは動作しません。
オートグローバル$_FILES は、PHP 4.1.0以降に存在します。 ($HTTP_POST_FILESは、これ以前のバージョンに存在します。) これらの配列には、全てアップロードされたファイルの情報が 含まれています。
$_FILES の内容は次のようになります。ここでは、上の例のスクリプトで使われたように、 アップロードファイルの名前としてuserfileを使用する ことを仮定していることに注意してください。 実際にはどんな名前にすることもできます。
クライアントマシンの元のファイル名。
ファイルのMIME型。ただし、ブラウザがこの情報を提供する場合。 例えば、"image/gif"のようになります。
アップロードされたファイルのバイト単位のサイズ。
アップロードされたファイルがサーバー上で保存されているテンポラ リファイルの名前。
このファイルアップロードに関する エラーコード ['error']は、PHP 4.2.0で追加されました。
php.ini の upload_tmp_dirディレクティブで 他の場所を指定しない限り、ファイルはサーバーにおけるデフォルトのテ ンポラリディレクトリに保存されます。サーバーのデフォルトディレクト リは、PHP を実行する環境において環境変数 TMPDIRを設 定することにより変更することができます。しかし、PHP スクリプトの内 部からputenv() 関数により設定しても上手くいきま せん。この環境変数は、アップロードされたファイルに他の処理を行う際 にも同様に使用することが可能です。
例 38-2. ファイルのアップロードを検証する 詳細については、is_uploaded_file() およびmove_uploaded_file()の関数のエントリも 参照ください。以下はフォームからファイルをアップロードするプロセスの例です。
|
アップロードされたファイルを受け取る PHP スクリプトは、アップロー ドされたファイルを用いて何をするべきかを決めるために必要なロジック を全て実装する必要があります。例えば、変数 $_FILES['userfile']['size']を使用して、小さすぎ たり、大きすぎたりするファイルを捨てることができます。指定した型以 外のファイルを全て捨てるために変数 $_FILES['userfile']['type']を用いることができま す。 PHP 4.2.0以降、 $_FILES['userfile']['error'] を使用することができ、 エラーコード に基づき、ロジックを構成することができます。 何らかの方法により、テンポラリディレクトリからファイルを削除し たり、他の場所に移動したりする必要があります。
フォームでアップロードされるファイルが選択されていない場合、PHPは、 $_FILES['userfile']['size'] として 0を返し、 $_FILES['userfile']['tmp_name'] には値を 設定しません。
移動または名前の変更が行われていない場合、リクエストの終了時にその ファイルはテンポラリディレクトリから削除されます。
例 38-3. ファイルの配列をアップロードする PHP はファイルについても HTML フォームで配列を使用すること をサポートしています。
|