htmlではデフォルトでFileをアップロードすると/tmpにランダムな名前で一度Uploadされる。そこで、UploadするPHPではそのときのFile名をサーバ変数から取得し、適当なフォルダに名前を変更して移動する。またMIME情報もサーバ変数に入るのでその情報から拡張子を決めることもできるし、local側のファイル名もサーバ変数から取得できる。(ただし、日本語ファイル名については未確認)
ファイルサイズはHTML側で最大を指定できるがphp.iniのupload_max_filesize (Default 2MB)を越えられない。大きくするときはこの値も大きくする必要があるようだ。
UploadするForm
<HTML> <HEAD> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=euc-jp"> <META HTTP-EQUIV="Cache-control" CONTENT="no-cache"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <TITLE>Upload TEST</TITLE> </HEAD> <BODY> <FORM ACTION="upload.php" METHOD="POST" ENCTYPE="multipart/form-data"> ^^^^^^^^<==これが必要 <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1024000"> <==Fileサイズの指定 <INPUT TYPE="file" NAME="img1" SIZE="40"> <P>(Max Size 1MB) <input type="submit" value="アップロード"> </FORM> </BODY> </HTML>
受けるPHP側
下のファイルでは../images/abc.(jpg|png|gif)で保存される
<?php //------------------------------------------------------ $img1 = $_FILES['img1']; // アップロードファイルオブジェクト $img1tmp = $_FILES['img1']['tmp_name']; // /tmp内のファイル名 $img1name = $_FILES['img1']['name']; // ローカルファイル名 $img1size = $_FILES['img1']['size']; // Fileサイズ $img1type = $_FILES['img1']['type']; // MIMEタイプ echo "Local FileName $img1name <=> Server FileName $img1tmp <Br>"; if (is_uploaded_file($img1tmp)){ if ($img1type=="image/gif"){$kaku=".gif";} if ($img1type=="image_png" || $img1type=="image/x-png"){$kaku=".png";} if ($img1type=="image/jpeg" || $img1type=="image/pjpeg"){$kaku=".jpg";} if ($kaku==""){$error="アップロード画像に誤りがあります(送信可能はGIF,JPG,PNGだけです)";} if ($kaku!=""){ $imgfilename = "abc" .$kaku; move_uploaded_file($img1tmp, "../images/". $imgfilename); echo "<P> Upload 成功 <BR>"; }else{ echo "<P> Upload 失敗 <BR>"; } }else{ echo "<P>Uploadファイルがありません<Br>"; } ?>