作成日:2006/05/18
2F ファイルのアップロード
PHPではpostメソッドによるファイルアップロードの機構をサポートしています。
アップロードされたファイルに関する情報は定義済み変数( $_FILES )によって取得する事ができます。 PHPは実際にアップロードされたファイルを一時ファイルとしてシステムに保存します。 スクリプトではこの一時ファイルを move_uploaded_file() 関数によって目的の場所に移動します。 以下にファイルアップロードの例を示します。
2F.1 ファイルアップロードの例
file-upload.php
<?php
$upload = $_FILES['upload'];
if (isset($upload['error']) && ($upload['error']==UPLOAD_ERR_OK)){
$image_path = getcwd() . "/upload/" . $upload['name'];
$image_url = "upload/" . $upload['name'];
move_uploaded_file($upload['tmp_name'], $image_path) Or
die ("Upload Error: {$upload['name']}");
}
?>
<html><body>
<form enctype="multipart/form-data" action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="10000">
Upload File <input name="upload" type="file"><br>
Comment <input name="comment" type="text"><br>
<input type="submit">
</form>
<?php
// アップロードした画像と画像ファイル格納場所の表示(Windowsの場合)
if ($image_url){
echo "<img src=\"" . $image_url . "\">\n";
$output = htmlspecialchars(shell_exec("dir upload"));
echo "<pre>\n{$output}\n</pre>";
}
?>
</body></html>
ファイルアップロードのフォーム
- ファイルをアップロードするフォームのエンコードタイプ multipart/form-data です。
- input要素 file の名前(上の例ではupload)が $_FILES のキーになります。
- input要素 hidden の MAX_FILE_SIZE フィールドを置いて送信ファイルの最大サイズを制限する事ができます。
- 最大サイズはvalue値で指定し単位はバイトです。
※ MAX_FILE_SIZE フィールドはfileの前に置く必要があります。 - 他のフォームと同様にtextフィールドの値は $_GET または $_POST ( 上例の場合は$_POST['comment'] ) で取得できます。
PHPマニュアルでは、 MAX_FILE_SIZE で指定された値はブラウザへの勧告であるとなっていますが、
どのような規格に基づくものか確認できませんでした。
しかし手元の実験(IE6,Firefox1)では、確かに MAX_FILE_SIZE を指定する事で送信サイズを制限する事ができました。
詳しい方はご指導下さい。
