问题
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:
'/path/to/create/recur/ively/'
all directories are created except for the last one... when I add another directory like:
'/path/to/create/recur/ively/more/'
again, all paths are created except for the last one...
have tried both with and without trailing slashes
Can any1 enlighten me here please?
回答1:
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...
回答2:
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.
回答3:
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';
回答4:
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
回答5:
The intermediate directories created are set based on the current umask. You want something like this
umask(0777);
mkdir($path, 0777, true);
回答6:
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;
}
}
回答7:
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
来源:https://stackoverflow.com/questions/1399174/php-mkdir-recursive-true-skips-last-directory