skip to Main Content

I have to create a root folder that uses the $username variable (coming from a previous section of the script), and then, inside this root folder, I need to create the /JS, /PHP and the /CSS subfolders.

I have tried the following (just for the JS subfolder) but it does not work. I receive no error but the JS subfolder is not created (the root folder is created):

$rootpath = $username. '/';
$jspath = $rootpath. '/js/';
return is_dir($rootpath) || mkdir($rootpath, 0777, true);
return is_dir($jspath) || mkdir($jspath);

What am i doing wrong?
Thank you in advance.
Kindest regards,

3

Answers


  1. I will advise you to use a function

    // list os subdirectories to be made
    $subdirectoryarrays = [
        'js','css','php'
    ];
    function makeCustomDir($directory_name,$subdirectoryarrays){
        $rootpath = $directory_name. '/';
        is_dir($rootpath) || mkdir($rootpath, 0755, true);
        foreach ($subdirectoryarray as $newroot) {
            $tobecreated = $rootpath. '/'.$newroot.'/';
            is_dir($tobecreated) || mkdir($tobecreated);
        }
        return true;
    }
    makeCustomDir('name_of_folder',$subdirectoryarrays);
    
    Login or Signup to reply.
  2. I try to explain your code:

    is_dir($rootpath) return true if the $rootpath exist, then mkdir($rootpath, 0777, true); do not get executed.

    If $rootpath does not exist, then mkdir($rootpath, 0777, true); is executed

    So at this point you have $rootpath folder and the code exit (or better return) due to the return in front of the commands

    Your code should be as follow:

    $rootpath = $username. '/';
    $subfolders=[
        'js',
        'css',
        'php',
    ];
    foreach ($subfolders as $folder) {
        $path = $rootpath . $folder;
        if (!mkdir($path, 0777, true) || !is_dir($path)) {
            // you can either return false or an exception, it is up to you
            return false;
            // throw new RuntimeException("Directory '$path' was not created');
        }
    }
    return true; 
    
    Login or Signup to reply.
  3. @roberto-braga has explained your code very well. There is another solution i like to give you. If you sure that certain directories is not exist and directly you want to create. You can use this piece of code.

        $structure = './'.$username.'/depth1/depth2/depth3/';
    
        if (!mkdir($structure, 0777, true)) {
           die('Failed to create directories...');
        }
    

    I like to give you another suggestion that before try the code make sure you have proper permission to create , edit and delete folder.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search