PHP は、全ての RFC-1867 対応ブラウザ(Netscape Navigator 3 以上、 Microsoft からのパッチをあてた Microsoft Internet Explorer 3 またはパッチ無しの それ以降の版を含みます)からファイルアップロードを 受けることができます。 この機能では、テキストとバイナリファイルの両方のアップロードが可能です。 PHP の認証関数およびファイル操作関数を用いて、アップロードを許可するユーザーと アップロード後にそのファイルを使用して行う動作を完全に制御することが 可能です。
PHPはNetscape ComposerおよびW3CのAmayaクライアントにより使用される PUTメソッドによるファイルアップロードもサポートしています。 詳細は、PUT メソッドのサポート を参照下さい。
ファイルアップロード画面は、次のような特別なフォームを作成することにより、 作成することができます。
例 18-1. ファイルアップロード用のフォーム
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <INPUT NAME="userfile" TYPE="file"> <INPUT TYPE="submit" VALUE="Send File"> </FORM>
$userfile - サーバーマシンにアップロードされたファイルが 保存されているテンポラリファイルの名前
$userfile_name - 送信元のシステムにおけるオリジナルのファイル名
$userfile_size - アップロードされたファイルのサイズ(バイト数)
$userfile_type - ファイルの MIME 型。ただし、ブラウザがこの情報を提供した場合のみ。例えば、"image/gif".のようになります。
ファイルは、デフォルトでサーバーにおけるデフォルトの テンポラリディレクトリに保存されます。 このディレクトリは、PHP を実行する環境において環境変数 TMPDIR を設定することにより変更することができます。 しかし、PHP スクリプトの内部から putenv 関数により 設定しても上手くいきません。
アップロードされたファイルを受け取る PHP スクリプトは、 アップロードされたファイルを用いて何をするべきかを 決めるために必要なロジックを全て実装する必要があります。 例えば、$file_size 変数を使用して、小さすぎたり、大きすぎたりする ファイルを捨てることができます。 指定した型以外のファイルを全て捨てるために $file_type 変数を用いることができます。 何らかの方法により、テンポラリディレクトリからファイルを 削除したり、他の場所に移動したりする必要があります。
移動または名前の変更が行われていない場合、リクエストの終了時に そのファイルはテンポラリディレクトリから削除されます。