そういえばPHPでアップロードするフォーム画面作ったことないなぁってことで作成
今回は
- JSON形式のみアップロード可
- 日本語含むファイル名はまだ想定していない
- ファイルサイズ上限付き
<?php //アップロード上限サイズ // ini_set("post_max_size", "10M"); //アップロード先ディレクトリ $upDir = __DIR__ . "/uploads/"; //バイト 20MBの場合 $sizeLimit = 20000000; if (isset($_FILES['upfile']['error'])) { try { switch ($_FILES['upfile']['error']) { case UPLOAD_ERR_OK:// 成功 break; case UPLOAD_ERR_NO_FILE:// ファイル未選択 throw new RuntimeException('ファイルが選択されていません'); case UPLOAD_ERR_FORM_SIZE:// フォーム定義の最大サイズ超過 case UPLOAD_ERR_INI_SIZE:// php.ini定義の最大サイズ超過 throw new RuntimeException('ファイルサイズが大きすぎます'); default: throw new RuntimeException('その他のエラーが発生しました'); } $filePath = $upDir . $_FILES["upfile"]["name"]; if(filesize($_FILES["upfile"]["tmp_name"]) > $sizeLimit){ throw new RuntimeException('ファイルサイズが大きすぎます'); } if(end(explode('.', $filePath)) !== "json"){ throw new RuntimeException('JSON形式でしか読み込めません'); } if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $filePath) && chmod($filePath, 0644)) { echo 'ファイルは正常にアップロードされました'; } else { throw new RuntimeException('ファイル保存時にエラーが発生しました'); } } catch (RuntimeException $e) { echo $e->getMessage(); } } ?>
HTML部分
<html> <head> <meta charset="utf-8"> <title>Upper</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile" /> <input type="submit" value="アップロード" /> </form> </body> </html>