Question

For uploading, I want to check if the year folder and month sub-folder already exist. If they don't, I would like to create them and save my uploads there.

<?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"],                     
                ));
            }
 ?>
Was it helpful?

Solution

Go with something like this:

$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);
}

You have to adjust this code depending on directory structure that you have. It shows you basic idea of checking whether the file or directory exists and if it's not, then it will be created you.

EDIT 1:

Adjusting your code to your need, it should be this (not tested):

$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;

NOTE: Put it right above

move_uploaded_file($_FILES["uploadfile"]["tmp_name"],$path);

OTHER TIPS

is_dir should be used to check the existence of a directory/folder NOT file_exists, file_exists will also return true if a the file is found with that filename. There is a recursive parameter which when set to true will make all nested directories. e.g.

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

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

So yours would be something like this

    $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);    
   /* } */
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").'/';

1st parameter path example "assets/upload" 2nd parameter allow file "option NUll" 3rd parameter file name example "image.png" return file name

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;
   }

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top