POST送信でファイルをアップロードするPHPのサンプル

PHPでPOSTした

ファイルをアップする部分を作ってました。
いつもは、とりあえず動くものができたらいいかなーなんて思って作るんですが。

なぜか先日は、いろいろアップロードできそうなクラスにすれば便利かなーと思い、
クラスに書き起こしてみました。

fileup.php

<?
/**
* fileup ver 1.0
* Copyright araishi.com
* MIT
* lastmodified 2011-10-29
**/
class fileup {
  var $files;
     var $dir;
     var $filename;
     var $error;
     var $saveFilename;
     var $_saveFilePath;
    
    
     function setFiles ($value){
          $this->files = $value;
     }

     function setDir ($value){
          $this->dir = $value;
     }    

     function setFilename ($value){
          $this->filename = $value;
     }
    
     function getSaveFilename(){
       return $this->saveFilename;
     }
    
    
     /*
       アップロードする前に同名ファイルがあれば上書きされないようにしている
     */
     function makeFilename (){
          if($this->filename){
               $filename = $this->filename . '.' . $this->getExtension();
          }else{
               $filename = $this->files['name'];
          }
      
          $this->saveFilename = $filename;
          $this->_saveFilePath = $this->dir . $this->saveFilename;
         
          if(is_file($this->_saveFilePath)){
               $this->error = 'filename error 1';
               return false;
          }
          return true;
     }
    
     /*
     アップロードされたファイルから拡張子を正規表現で抜いて返す
     */
     function getExtension (){
          if(!$this->files['name']){
               $this->error = 'getExtension error1';
            return false;
          }
       if(!preg_match('/\.(.+)$/', $this->files['name'], $match)){
               $this->error = 'getExtension error2';
               return false;
          }
          return $match[1];
     }
    
     /*
     アップロードするディレクトリが無ければ作る
     */
     function chkDir (){
       if(!is_dir($this->dir)){
            if(!mkdir($this->dir)){
                    $this->error = 'chkDir make error';
                 return false;
               }
               if(!chmod($this->dir, 0777)){
                    $this->error = 'chkDir chmod error';
                 return false;
               }
          }
     }
    
     /*
     アップロードして権限を777にしてる
     */
     function up(){
          $this->chkDir();
          $this->makeFilename();
         
          if($this->error){
            return false;
          }
         
          $src = @file_get_contents($this->files['tmp_name']);
          if(!$src){
               $this->error = 'up error1';
            return false;
          }
         
          file_put_contents($this->_saveFilePath, $src);
         
          if(chmod($this->_saveFilePath, 0777)){
            return true;
          }
          $this->error = 'up error2';
          return false;
     }
}

とりあえず動作するものを…。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<?php
if(isset($_POST['submit'])){

include 'fileup.php';

$fileup = new fileup;

// ファイルを指定
$fileup->setFiles($_FILES['file']);

// ディレクトリを指定
$fileup->setDir('./up/');

// ファイル名を指定(省略すると元のファイル名になる)
$fileup->setFilename();

// アップ実行
if(!$fileup->up()){
echo $fileup->error; exit;
}
echo $fileup->getSaveFilename().'をアップロードしました。';
}
?>
<form action="./" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="アップ" name="submit">
</form>
</body>
</html>

PHPのバージョンが古かったりセーフモードだと動かないかもしれません><
さくらのレンタルサーバーとかさくらのVPSなら動作すると思います。

サンプル

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です