2

对于上传,我想检查年文件夹和月子文件夹是否已经存在。如果他们不这样做,我想创建它们并将我的上传保存在那里。

<?php
     $newname =  $_POST['changename'];
      $temp = explode(".", $_FILES["uploadfile"]["name"]);
        $extension = end($temp);

        if(!(
        $_FILES['uploadfile']['type']=='image/jpeg' ||
        $_FILES['uploadfile']['type']=='image/png' ||
        $_FILES['uploadfile']['type']=='image/gif' ||
        $_FILES['uploadfile']['type']=='image/bmp' 
        )) // if file does not equal these types, kill it
        {
        echo  $_FILES['uploadfile']['type'] . " is not an acceptable format.";
        die();
        }

        if ($_FILES["uploadfile"]["size"] > 20000000)
            {
                echo "File too big. Max 20mb";
                die();
            }

        if ($_FILES["uploadfile"]["error"] > 0)
            {
            echo "Return Code: " . $_FILES["uploadfile"]["error"] . "<br>";
            }
          else
            {
                $new_file_name = $newname.".".$extension;
                $path = "uploads/".$new_file_name;
                move_uploaded_file($_FILES["uploadfile"]["tmp_name"],$path);
                echo json_encode(array(
                    "success" => true,
                    "imagepath" => $path,
                    "filetype" => $_FILES["uploadfile"]["type"],
                    "new_file_name" => $newname,
                    "fileName" => $_FILES["uploadfile"]["name"],
                    "fileTmp" => $_FILES["uploadfile"]["tmp_name"],                     
                ));
            }
 ?>
4

4 回答 4

5

用这样的东西:

$year = date("Y");   
$month = date("m");   
$filename = "../".$year;   
$filename2 = "../".$year."/".$month;

if(file_exists($filename)){
    if(file_exists($filename2)==false){
        mkdir($filename2,0777);
    }
}else{
    mkdir($filename,0777);
}

您必须根据您拥有的目录结构调整此代码。它向您展示了检查文件或目录是否存在的基本思想,如果不存在,那么它将由您创建。

编辑1:

根据您的需要调整您的代码,它应该是这样的(未经测试):

$path = "uploads/";

$year_folder = $path . date("Y");
$month_folder = $year_folder . '/' . date("m");

!file_exists($year_folder) && mkdir($year_folder , 0777);
!file_exists($month_folder) && mkdir($month_folder, 0777);

$path = $month_folder . '/' . $new_file_name;

注意:放在上面

move_uploaded_file($_FILES["uploadfile"]["tmp_name"],$path);
于 2013-10-16T11:10:36.297 回答
3

is_dir应该用于检查目录/文件夹的存在 NOT file_existsfile_exists如果找到具有该文件名的文件,也将返回 true。有一个递归参数,当设置为 true 时,将生成所有嵌套目录。例如

    $pathname_parameter = date("Y") . '/' . date("m") . '/';
    $mode_parameter = 0777;
    $recursive_parameter = true; 

    if (!is_dir($pathname_parameter)) {
        mkdir($pathname_parameter, $mode_parameter, $recursive_parameter);
    }

所以你的会是这样的

    $new_file_name = $newname.".".$extension;
    $pathname = 'uploads/' . date("Y") . '/' . date("m") . '/';

    if (!is_dir($pathname)) {
        mkdir($pathname, 0777, true);
    }
    $destination = $pathname . $new_file_name;  
    /* if( (!is_file($destination)) || (isset($_POST['overwrite']) && (int)$_POST['overwrite']) ){ */
    move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $destination);    
   /* } */
于 2015-08-20T07:58:02.450 回答
0
if (!file_exists(date("Y")))//Checking if year folder exist
    mkdir(date("Y"));//Creating folder if it dosent exist(You may need to add ,0777) in UNIX
if (!file_exists(date("Y").'/'.date("m")))//Checking for month folder
    mkdir(date("Y").'/'.date("m"));
$path='./'.date("Y/m").'/';
于 2013-10-16T11:34:23.937 回答
0

第一个参数路径示例“assets/upload”第二个参数允许文件“option NUll”第三个参数文件名示例“image.png”返回文件名

public function upload_file_date_directory($paths,$allow = '', $file) {

   $year = date('Y');
   $month = date('m');
   $path = "./". $paths . $year . "/" . $month;
   if (!is_dir($path)) {
        mkdir($path, 0777, true);
   }

   $config['upload_path'] = $path;
   $config['allowed_types'] = "gif|jpg|png|jpeg|$allow";
   $config['max_size'] = '3000';
   $config['max_width'] = '2000';
   $config['max_height'] = '2000';
   $config['file_name'] = trim(str_replace(" ", "", date('dmYHis')));
   $this->load->library('upload', $config);

   $newimg = '';
   if (!$this->upload->do_upload($file)) {
        $error = array('error' => $this->upload->display_errors());
        $newimg = $error;
        return $newimg;
   } else {
        $data = array('upload_data' => $this->upload->data());
        $newimg = $data['upload_data']['file_name'];
        return  $year . "/" . $month ."/".$newimg;
   }

}
于 2018-01-11T10:54:03.980 回答