@blog.justoneplanet.info

日々勉強

PHPでファイルをアップロードする

■はじめに

  • 宜しければ質問や改善案などはコメントに書き込んでください
  • 自己責任でソースをご利用ください

■ファイル名: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(ディレクトリハンドラ)で指定のディレクトリを閉じる

1件のコメント»

初心者のためのPHP(1)…「ファイルをアップロードしよう!…

■はじめに

* 宜しければ質問や改善案などはコメントに書き込んでください
* 自己責任でソースをご利用ください
* クレームは受け付け (more…)

RSS feed for comments on this post.TrackBack URL

Leave a comment