ホーム > カテゴリ > PHP・Laravel・CakePHP >

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

ブラウザを使用してファイルをアップロードするサンプルです。CMSなどのシステム等で使用すると思います。サンプルではGIF/PNG/JPEGの画像ファイルの認識や各種エラーにも対応しています。言語はPHPとなります。

まずは結果から

[初期画面]

[アップロード後の画面]

ファイルを選択して「アップロードを実行する」ボタンを押すとサーバーへ画像ファイルがアップロードされます。アップロードされた画像ファイルはブラウザで表示されるようにしています。

ソースコード[upload.php]

早速、ソースコードを貼り付けます。

<?php

  $errmsg = ""; // エラーメッセージ
  define("FOLDER_UPLOAD" ,"./hoge/") ; // 保存先のフォルダ名(任意のフォルダ名にする)  
  
  if (isset($_FILES["upfile"])){
       
      // エラーの確認
      switch ($_FILES["upfile"]["error"]) {
        case UPLOAD_ERR_OK: // OK
            break;
        case UPLOAD_ERR_NO_FILE:   
            $errmsg = '<span style="font-weight:bold;color:red;">ファイルが選択されていません。</span><br />';
            break;
        case UPLOAD_ERR_INI_SIZE:  
        case UPLOAD_ERR_FORM_SIZE: 
            $errmsg .= '<span style="font-weight:bold;color:red;">「'. $_FILES["upfile"]["name"] . '」のファイルサイズが最大値を超えています。</span><br />';
            break;
        default:
            $errmsg .= '<span style="font-weight:bold;color:red;">「'. $_FILES["upfile"]["name"] . '」:エラーが発生しました。</span><br />';
            break;
      }                     
      
      if ($_FILES["upfile"]["error"] === UPLOAD_ERR_OK){
        
          // 同名ファイルの確認   
          if (file_exists(FOLDER_UPLOAD .$_FILES["upfile"]["name"])){            
             $errmsg .= '<span style="font-weight:bold;color:red;">「' .$_FILES["upfile"]["name"] . '」は既に存在します。</span><br />';  
          }           
          
          // ファイルタイプの確認
          if (!( ($_FILES["upfile"]["type"] === 'image/gif')  || 
                 ($_FILES["upfile"]["type"] === 'image/jpeg') ||
                 ($_FILES["upfile"]["type"] === 'image/png'))){
             $errmsg .= '<span style="font-weight:bold;color:red;">「' .$_FILES["upfile"]["name"] . '」は対応していない形式です。</span><br />'; 
          }
      }               
        
      // テンポラリからファイルの移動 
      if ($errmsg  == ""){
          $filename  = FOLDER_UPLOAD . $_FILES["upfile"]["name"];
          if (move_uploaded_file($_FILES['upfile']['tmp_name'],$filename)){
             // パーミッションの変更
             chmod($filename,0644);  
          }else{
              $errmsg .= '<span style="font-weight:bold;color:red;">ファイルのアップロードに失敗しました。</span><br />';        
          }  
      } 
      
      // メッセージの表示
      if ($errmsg  == ""){
          $errmsg .= '<span style="font-weight:bold;">・「' . $_FILES["upfile"]["name"] . '」をアップロードしました。</span><br />'; 
          $errmsg .= '<img src="'. htmlspecialchars(FOLDER_UPLOAD . $_FILES["upfile"]["name"]) .'" /><br />';
      }
  }      
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div><?php echo $errmsg; ?></div>
<br />
<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="upfile" size="30" /><br />
  <br />
  <input type="submit" value="アップロードを実行する" />
</form>
</body>
</html>

サンプルの解説

HTMLではformタグにenctype="multipart/form-data"を追加する事でファイルがアップロードできるようになります。

PHPでは$_FILESでアップロードされたデータを扱うことができます。各種エラー処理を実施してから、move_uploaded_fileでサーバーのテンポラリから任意のフォルダへファイルをコピーします。

非常にざっくりな説明ですが後はソース内のコメントから読み取ってくださいね :-)

その他のサンプル

複数ファイルのアップロードとドラッグ&ドロップに対応したい場合は

をご覧下さい。





関連記事



公開日:2015年01月28日
記事NO:00162