迷路的风吧 关注:8贴子:236
  • 1回复贴,共1

一个自动创建多级目录的上传类

只看楼主收藏回复

<?php/** * fy2 * Created by Houang Use PhpStorm. * User: Houang Windows2008R2 Administrator * DateTime: 2015/5/16 0:15 * File: upup.class.php */class upup { private $_dir; private $_tdir; private $_fdirn; private $_sdirn; private $_fn; public function __construct($_file,$_user='test',$_fdirn=3,$_sdirn=10,$_fn=5){ $this->_dir = $_file; $this->_tdir = $_user; $this->_fdirn = $_fdirn; $this->_sdirn = $_sdirn; $this->_fn = $_fn; //if(!file_exists($_file.'/'.$_user)){//is_dir if(!is_dir($_file.'/'.$_user)){//is_dir $this->mkdir_s($_file.'/'.$_user); } } public function rtn(){ if($this->get_now_name() == '空间不足'){ //echo '<script>alert("'.$_str.'");</script>'; return $this->get_now_name(); exit(0); } return $this->_dir.'/'.$this->_tdir.'/'.$this->get_now_name();//下一位置 } public function save_file($_tmp_dir,$_put_dir,$_file_type = '.jpg'){//移动文件 $this->mkdir_s(dirname($_put_dir)); return @move_uploaded_file ( $_tmp_dir, $_put_dir.$_file_type); } public function get_now_name(){//获得下一个保存标记 $arr = $this->dir_arr(); $_str = $this->get_file_dir(); if($_str == '空间不足'){ //echo '<script>alert("'.$_str.'");</script>'; return $_str; exit(0); } $_nu = array_search($_str,$arr); $sarr = explode("/",$_str); $_nu++ ; //$_nu = $sarr[0]*$sarr[1]*$sarr[2]; //$_nu = ($sarr[0]-1)*pow( ( $this->_sdirn * $this->_fn ),($sarr[0]-1) ) + ($sarr[1] - 1)*pow( ( $this->_fn ),($sarr[1]-1)) + $sarr[2]; //echo '<script>alert("'.$_nu.'");</script>'; return $arr[$_nu];//下一位置 }//检测是否满了 满了 true 没有满 false public function test_file_full(){ $full_dir = $this->_dir.'/'.$this->_tdir; if($this->test_full($full_dir,$this->_fdirn)){//检测是否有3个目录 if($this->test_full($full_dir.'/'.$this->_fdirn,$this->_sdirn)){//检测是否有10个目录 if($this->test_full($full_dir.'/'.$this->_fdirn.'/'.$this->_sdirn,$this->_fn)){//检测是否有5个文件 return true;//满了 }else{ return false; } }else{ return false; } }else{ return false; } }//检测某个目录是否满了 private function test_full($base_dir,$_num){//检测目录/文件是否满了 $dir_arr = scandir($base_dir);//获得目录数组 $_now_num = count($dir_arr) - 2; if($_num == $_now_num){//最后一个了 return true; }else{ return false; } }//获取保存位置 private function get_file_dir(){ if($this->test_file_full()){ return '空间不足'; }else{ $dir_arr = scandir($this->_dir.'/'.$this->_tdir); $_now_num = count($dir_arr) - 2; if($_now_num < 1){ //没有目录 return '0/0/0';//返回 1/1/1.jpg }else{//有目录 //判断二级目录 $dir_arr1 = scandir($this->_dir.'/'.$this->_tdir.'/'.$_now_num);//已有一级目录数组 $_now_num2 = count($dir_arr1) - 2;//二级目录号 if($_now_num2 < 1 && $_now_num == 1){ return '0/0/0'; }elseif($_now_num2 < 1 && $_now_num > 1){ return ($_now_num-1).'/'.$this->_sdirn.'/'.$this->_fn; } $dir_arr2 = scandir($this->_dir.'/'.$this->_tdir.'/'.$_now_num.'/'.$_now_num2);//已有二级目录数组 $_now_num3 = count($dir_arr2) - 2;//三级目录文件数 if($_now_num2 > 1 && $_now_num3 < 1){ return $_now_num.'/'.($_now_num2-1).'/'.$this->_fn; }elseif($_now_num > 1 && $_now_num2 == 1 && $_now_num3 < 1){ return ($_now_num-1).'/'.$this->_sdirn.'/'.$this->_fn; }elseif($_now_num == 1 && $_now_num2 == 1 && $_now_num3 < 1){ return '0/0/0'; } return $_now_num.'/'.$_now_num2.'/'.$_now_num3; } } } public function dir_arr(){//输出数组 $_n = 0; $_arr = array(); for($_i = 1;$_i<=$this->_fdirn;$_i++){ for($_j = 1;$_j<=$this->_sdirn;$_j++){ for($_k = 1;$_k<=$this->_fn;$_k++) { $_arr[$_n] = $_i . '/' . $_j . '/'.$_k; $_n++; } } } return $_arr; } private function mkdir_s($dir,$mode=0777){//创建路径 if(version_compare(PHP_VERSION, '5.0.0', '>=')){ if(!is_dir($dir)){ return mkdir($dir,$mode,true); } return true; }else{ return $this->mkdirs_s($dir); } } private function mkdirs_s($dir){ return is_dir($dir) or (mkdirs(dirname($dir)) and mkdir($dir,0777)); }}


1楼2015-08-08 09:54回复
    ................不会自动格式化代码....


    2楼2015-08-08 09:55
    回复