PHP mkdir( $recursive = true ) skips last directory

拜拜、爱过 提交于 2019-12-04 02:09:31

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...

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.

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

What is your PHP version? Is safe_mode turned on?

If so, then it could be that you are experiencing http://bugs.php.net/bug.php?id=43276

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

umask(0777);
mkdir($path, 0777, true);

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

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!