PHP的mkdir($递归= TRUE)跳过最后一个目录(PHP mkdir( $recursive

2019-08-04 11:17发布

我有下面的代码在PHP 5.2.4(无safe_mode设置)Linux服务器:

mkdir( $path, 0777, true );

当我进入的路径,如:

'/path/to/create/recur/ively/'

除了最后一个创建的所有目录......当我添加其他目录,如:

'/path/to/create/recur/ively/more/'

再次,是除了最后一个创建的所有路径...

尝试带或不带尾随斜杠

可以ANY1开导我在这里吗?

Answer 1:

好的解决方案是:不存在任何问题。

我没有隔离测试的代码,但只承担了下面的代码没有做任何的目录结构...

因为我发现了目录得到了由代码本身删除以后。

总之,课程学...



Answer 2:

尝试从您的路径中删除斜杠。

至少,它是如何在的例子中使用mkdir文档。

个人而言,我不记得有任何问题,但我usally不追加尾随斜线,所以去和尝试。

更新

我只是想你的代码,它创建的每个目录,包括最后一个。 我在运行Mac OS X 10.5。 不知道为什么它不为你工作:-(

这是我使用的代码:

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

对不起,好像我没有帮助在这里。



Answer 3:

如果你什么都试过了,它一直没有工作,再加入一些文字类的路径的末尾:

$path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway';


Answer 4:

什么是你的PHP版本? 是safe_mode设置是否打开?

如果是的话,那么它可能是你正在经历http://bugs.php.net/bug.php?id=43276



Answer 5:

创建中间目录是基于当前的umask设置。 你想是这样的

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


Answer 6:

创造指定路径的所有目录(文件夹)功能。 无需编写代码创建指定路径的每个目录(文件夹)。 它会创建的所有目录(文件夹)。

像:如果你想创建一个类似的目录结构
组织/ 1 /用户/ 1 /

所以,你只需要调用与像目录路径此功能
$ directories_path =组织/ 1 /用户/ 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;
    }
}


Answer 7:

如果你做出愚蠢的错误我没有和传递一个字符串,而不是数字字面模式,你会得到这个错误。

mkdir( $path, "0777", true ); // BAD - only creates /a/b

mkdir( $path, 0777, true ); // GOOD - creates /a/b/c/d


文章来源: PHP mkdir( $recursive = true ) skips last directory