ファイルアップロードのサポート

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>
_URL_ は、PHP HTML ファイルを指す必要があります。 隠しフィールド MAX_FILE_SIZE は、ファイル名入力フィールドの 前に置く必要があります。 この値が受け取られる最大のファイルサイズとなります。 この値は、バイト数で表します。 フォーム中で指定された送信先ファイルにおいては、 アップロードが成功した後に次の変数が定義されます。

上記の変数のうち、"$userfile" は、 アップロード用フォーム中の TYPE=file を有する INPUT フィールドの NAME フィールドの値とは関連がないことに注意して下さい。 上のアップロード用フォームの例においては、その NAME フィールドの値を "userfile" としています。

ファイルは、デフォルトでサーバーにおけるデフォルトの テンポラリディレクトリに保存されます。 このディレクトリは、PHP が実行される環境において環境変数 TMPDIR を 設定することにより変更することができます。 しかし、PHP スクリプトの内部から PutEnd() 関数によりこの変数を 設定しても上手くいきません。

アップロードされたファイルを受け取る PHP スクリプトは、 アップロードされたファイルを用いて何をするべきかを 決めるために必要なロジックを全て実装する必要があります。 例えば、$file_size 変数を使用して、小さすぎたり、大きすぎたりする ファイルを捨てることができます。 指定した型以外のファイルを全て捨てるために $file_type 変数を用いることができます。 何らかの方法により、テンポラリディレクトリからファイルを 削除したり、他の場所に移動したりする必要があります。

CERN httpd は、クライアントから得た content-type MIME ヘッダにおいて 最初が空白文字で始まるものを切り捨てるようですので注意して下さい。 このような動作をする限り、CERN httpd は、ファイルアップロード機能を サポートしないでしょう。