ワイズリマインダー

KCFinderにディレクトリごとの容量制限をかけてみた

関連記事はこちらで見ることが出来ます。

記事「KCFinderを導入してみる」からのカスタマイズです。

デフォルトのままだと、無制限(ストレージの許す限り)にアップロードできるので、制限をかけれるようにカスタマイズしてみた。
(標準機能でできる場合は教えてください)
使用したKCFinderは4.5.8です

次の二つのphpをカスタマイズします。
kcfinder/core/class/browser.php
283行目$dir = $this->postDir();の後ろに挿入


        //*** Ys Costomize 1.0.0 ***//
        if(isset($this->config['dirMaxSize'])){
          function dir_size($d){
            $s=(int)0;
            $h=opendir($d);
            while($f=readdir($h)){
              if($f=='..' || $f=='.') continue;
              else if(!is_dir($d.'/'.$f)) $s+=filesize($d.'/'.$f);
              else $s+=dir_size($d.'/'.$f);
            }
            return $s;
          }
          $Capacity=(int)0;
          if(preg_match('/^\d+$/',$this->config['dirMaxSize'])) $Capacity=$this->config['dirMaxSize'];
          else if(preg_match('/^(\d+)B$/i',$this->config['dirMaxSize'],$matches)) $Capacity=$matches[1];
          else if(preg_match('/^(\d+)KB$/i',$this->config['dirMaxSize'],$matches)) $Capacity=$matches[1]*1024;
          else if(preg_match('/^(\d+)MB$/i',$this->config['dirMaxSize'],$matches)) $Capacity=$matches[1]*1024*1024;
          else $this->errorMsg("Unknown error.");
          $Used=dir_size($dir);
          if(is_array($this->file['size'])){
            foreach($this->file['size'] as $byte) $Used+=$byte;
          }
          if($Capacity<=$Used) $this->errorMsg("The uploaded file exceeds {size} bytes.",array('size'=>$Capacity));
        }
        //*** Ys Costomize 1.0.0 END ***//

kcfinder/core/class/uploader.php
339行目if (!strlen($message)) {のに挿入

            //*** Ys Costomize 1.0.0 ***//
            if (!strlen($message)) {
                if(isset($this->config['dirMaxSize'])){
                  function dir_size($d){
                    $s=(int)0;
                    $h=opendir($d);
                    while($f=readdir($h)){
                      if($f=='..' || $f=='.') continue;
                      else if(!is_dir($d.'/'.$f)) $s+=filesize($d.'/'.$f);
                      else $s+=dir_size($d.'/'.$f);
                    }
                    return $s;
                  }
                  $Capacity=(int)0;
                  if(preg_match('/^\d+$/',$this->config['dirMaxSize'])) $Capacity=$this->config['dirMaxSize'];
                  else if(preg_match('/^(\d+)B$/i',$this->config['dirMaxSize'],$matches)) $Capacity=$matches[1];
                  else if(preg_match('/^(\d+)KB$/i',$this->config['dirMaxSize'],$matches)) $Capacity=$matches[1]*1024;
                  else if(preg_match('/^(\d+)MB$/i',$this->config['dirMaxSize'],$matches)) $Capacity=$matches[1]*1024*1024;
                  else $message=$this->label("Unknown error.");
                  $Used=dir_size($dir);
                  if(is_numeric($this->file['size'])) $Used+=$this->file['size'];
                  if($Capacity<=$Used) $message=$this->label("The uploaded file exceeds {size} bytes.",array('size'=>$Capacity));
                }
            }
            //*** Ys Costomize 1.0.0 END ***//

最後に設定ファイルを変更します。
希望の数値に変更してください。
kcfinder/conf/config.php
19行目$_CONFIG = array(の後ろに挿入

    'dirMaxSize'=>'100KB'

使用できる単位は、B,KB,MBです。

デモ
現時点で制限に達しています

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください