PHP は、全ての RFC-1867 対応ブラウザからファイルアップロードを 受けることができます。 この機能では、テキストとバイナリファイルの両方のアップロードが可能です。 PHP の認証、論理関数を用いて、アップロードを許可するユーザーと アップロード後にそのファイルを使用して行う動作を完全に制御することが 可能です。
ファイルアップロード画面は、次のような特別なフォームを作成することにより、 作成することができます。
Example 2-3. ファイルアップロード用フォーム <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 スクリプトの内部から PutEnd() 関数によりこの変数を 設定しても上手くいきません。
アップロードされたファイルを受け取る PHP スクリプトは、 アップロードされたファイルを用いて何をするべきかを 決めるために必要なロジックを全て実装する必要があります。 例えば、$file_size 変数を使用して、小さすぎたり、大きすぎたりする ファイルを捨てることができます。 指定した型以外のファイルを全て捨てるために $file_type 変数を用いることができます。 何らかの方法により、テンポラリディレクトリからファイルを 削除したり、他の場所に移動したりする必要があります。
CERN httpd は、クライアントから得た content-type MIME ヘッダにおいて 最初が空白文字で始まるものを切り捨てるようですので注意して下さい。 このような動作をする限り、CERN httpd は、ファイルアップロード機能を サポートしないでしょう。