■はじめに
- 宜しければ質問や改善案などはコメントに書き込んでください
- 自己責任でソースをご利用ください
■ファイル名:upload.php
つうかこっちは別にHTMLファイルでもOK!
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>アップロード</title> <style type="text/css"> h1 { color:#aaaaaa; } </style> </head> <body> <h1>アップロード</h1> <form action="upload_save.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1000000" /> <input type="file" name="upload_file" size="70" /><br /> (上書き禁止) <input type="checkbox" name="forbidden" value="1" checked="checked" /> <input type="submit" value="アップロード" /> </form> </body> </html>
■ファイル名:「upload_save.php」
<?php $error_flag = FALSE; $name = "./doc/" . $_FILES['upload_file']['name']; if(file_exists($name) == TRUE && $_POST['forbidden'] == 1){ $error_flag = TRUE; $error_msg = "同名のファイルが存在します。"; } elseif($_FILES['upload_file']['error'] != UPLOAD_ERR_OK){ $error_flag = TRUE; switch($_FILES['upload_file']['error']){ case UPLOAD_ERR_INI_SIZE : $error_msg = "php.iniのupload_max_filesize制限を超えています"; break; case UPLOAD_ERR_FORM_SIZE : $error_msg = "HTMLのMAX_FILE_SIZE制限を超えています"; break; case UPLOAD_ERR_PARTIAL : $error_msg = "ファイルが一部しかアップロードされていません"; break; case UPLOAD_ERR_NO_FILE : $error_msg = "ファイルはアップロードされませんでした"; break; default : $error_msg = "不明なエラーです"; break; } } if($error_flag){ print ("<div style='color:red'>" . $error_msg . "</div>"); } else{ move_uploaded_file($_FILES['upload_file']['tmp_name'], $name); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>ファイルのアップロード結果</title> <style type="text/css"> h1 { color:#aaaaaa; } </style> </head> <body> <h1>ファイルのアップロード結果</h1> <table border="1"> <tr> <th>ファイル</th> <th>サイズ</th> <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> <td><?php print(date("Y/m/d H:i:s", fileatime("./doc/" . $file))); ?></td> <td><?php print(date("Y/m/d H:i:s", filemtime("./doc/" . $file))); ?></td> </tr> <?php } } closedir($o_dir); ?> </table> </body> </html>
■ざっくりと解説
- file_exist(パスとファイル名)で指定されたファイルがある時、TRUEを返し、無ければFALSE
- $FILES[‘要素’][‘情報の種類’]でアップロードされたファイルの情報を取得
- move_uploaded_file($_FILES[‘upload_file’][‘tmp_name’], $name)関数でサーバー上のディレクトリに保存。この記載はサーバー上に一時的に保存されたファイルのファイル名を変数$nameという名前(ディレクトリに)保存するという事である
- $FILES[‘要素’][‘error’]に格納されるのはいずれも定数でUPLOAD_ERR_OK(アップロード成功)、UPLOAD_ERR_INI_SIZE(php設定ファイル上の最大アップロード容量超過)、UPLOAD_ERR_FORM_SIZE(HTMLのフォームで指定した容量を超過)、UOLOAD_ERR_PARTIAL(ファイルが途切れている)、UPLOAD_ERR_NO_FILE(ファイルが存在しない)の5種類!?
- 上記を利用しswitch文で条件分岐、的確なエラーメッセージを格納
- clearstatcache()関数でサーバー上のファイルシステムに関するキャッシュを消去する。アップロードしたファイルについての詳細を次に表示するため
- opendir(フォルダのパス)で指定したフォルダを開きディレクトリハンドラ(ディレクトリを処理する為のもの!?)を返す
- readdir(ディレクトリハンドラ)でファイル名を返す。「..」は親ディレクトリ、「.」はカレント(現在の)ディレクトリ
- closedir(ディレクトリハンドラ)で指定のディレクトリを閉じる
ピンバック: Just One Planet