PHP mkdir( $recursive = true ) skips last directory

后端 未结 7 1937
南旧
南旧 2021-02-20 10:39

I\'ve got the following piece of code on a PHP 5.2.4 (no safe_mode) linux server:

mkdir( $path, 0777, true );

when I enter a path like:

<
相关标签:
7条回答
  • 2021-02-20 10:45

    If you tried everything and it keeps not working, then add some text in the end of the path like:

    $path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway';
    
    0 讨论(0)
  • 2021-02-20 10:51

    Try to remove the trailing slash from your path.

    At least that's how it's being used in the examples of the mkdir documentation.

    Personally I can't remember having problems, but I usally don't append trailing slashes, so go and try that.

    UPDATE:

    I just tried your code and it created every directory including the last one. I'm running Mac OS X 10.5. No idea why it's not working for you :-(

    That's the code I used:

    <?php
    $path = '/Users/andre/test/bla/foo';
    mkdir( $path, 0777, true );
    

    Sorry, seems like I'm of no help here.

    0 讨论(0)
  • 2021-02-20 10:53

    Ok the solutions is as follows: there was no problem.

    I did not test the code in isolation, but only assumed the following code was not doing anything to the directory structure...

    as I found out the directory got deleted later on by the code itself.

    Anyway, Lesson learned...

    0 讨论(0)
  • 2021-02-20 10:58

    Function that create all directories (folders) of given path. No need to write code create each directories (folders) of given path. it will create all directories (folders).

    Like : If you want to create directory structure like
    organizations / 1 / users / 1 /

    So you only need to call this function with directories path like
    $directories_path = 'organizations/1/users/1/';
    createUploadDirectories($directories_path);

    /*
    * Method Name : createUploadDirectories
    * Parameter : null
    * Task : Loading view for create directries for upload
    */
    
    if ( ! function_exists('createUploadDirectories')){
        function createUploadDirectories($upload_path=null){
            if($upload_path==null) return false;
            $upload_directories = explode('/',$upload_path);
            $createDirectory = array();
            foreach ($upload_directories as $upload_directory){
                $createDirectory[] = $upload_directory;
                $createDirectoryPath = implode('/',$createDirectory);
                if(!is_dir($createDirectoryPath)){
                    $old = umask(0); 
                    mkdir($createDirectoryPath,DIR_WRITE_MODE);// Create the folde if not exist and give permission
                    umask($old); 
                }               
            }
            return true;
        }
    }
    
    0 讨论(0)
  • 2021-02-20 10:59

    You'll get this error if you make the silly mistake I did and pass a string, rather than the numeric literal for mode.

    mkdir( $path, "0777", true ); // BAD - only creates /a/b
    
    mkdir( $path, 0777, true ); // GOOD - creates /a/b/c/d
    
    0 讨论(0)
  • 2021-02-20 11:08

    The intermediate directories created are set based on the current umask. You want something like this

    umask(0777);
    mkdir($path, 0777, true);
    
    0 讨论(0)
提交回复
热议问题