アップロード

アップロード
アップロードを行うFormは次のようになります。最大のファイルサイズを hidden(見えない入力) で設定しています。
<form method="post" action="up_save.php"
 enctype="multipart/form-data">
 <input type="hidden" name="max_file_size"
 value="1000000" />
 <input type="file" name="upload_file" 
    size="70"><br />
<input type="submit" value="upload" />
</form>

ファイルのアップロード
ファイルをアップロードするには、ファイルの情報をForm情報と一緒に、murltipart/form-data として送る必要があります。ファイル名を指定するには、input タブのtype を file とします。

CGI
ファイルを受け取るCGIは次のようになります。ファイルは doc フォルダに保存します。アップロードに成功すると、move_uploaded_file()でファイルを doc フォルダに移動します。その後、doc フォルダのファイルを表形式でまとめて表示します。
<?php
$error_flag=FALSE;
$name="./doc/".$_FILES['upload_file']['name'];
if($_FILES['upload_file']['error']!=
    UPLOAD_ERR_OK){
  $error_flag=TRUE;
  switch($_FILES['upload_file']['error']){
    case UPLOAD_ERR_FORM_SIZE :
      $error_msg=" サイズ制限を越えています。";
      break;
    case UPLOAD_ERR_NO_FILE :
      $error_msg="アップロード失敗";
      break;  
  }
}
if($error_flag){
  print($error_msg);
}else{
  move_uploaded_file($_FILES['upload_file']
     ['tmp_name'],$name);
}?>
<html>
<head>
<title>ファイルのアップロード</title>
</head>
<body>
<h1>アップロード済みファイル</h1>
<table border="1">
<tr>
  <th>ファイル</th><th>サイズ</th>
</tr>
<?php
clearstatcache();
$o_dir=opendir("./doc/");
while($file=readdir($o_dir)){
  if($file!="." && $file!=".."){
?>
  <tr>
   <td><a href="./doc/<?php print($file); ?>">
     <?php print($file); ?></a></td>
   <td><?php print(round(filesize("./doc/"
        .$file)/1024)); ?>KB</td>
  </tr>
<?php
  }
}
closedir($o_dir);
?>
</body>
</html>
属性 意味
name ファイル名
size ファイルのサイズ
type ファイルの型
error エラー種別

CGI
ファイルを受け取るCGI側ではファイル情報を2次元のシステムグローバル変数の $_files[ファイルtypeの名前][属性] で受け取ります。エラー種別は、ファイルサイズが、Formで指定したmax_file_sizeを超えたとき、UPLOAD_ERROR_FORM_SIZE、送信ファイルがないとき UPLOAD_ERR_NO_FILE、正常の場合UPLOAD_ERR__OK となります。

ファイル名のチェック
ここでは、アップするファイルのチェックをしていません。同名のファイルを送ると上書きします。