PHP mkdir($ recursive = true)跳过最后一个目录

时间:2009-09-09 11:39:58

标签: php recursion path filesystems mkdir

我在PHP 5.2.4(没有safe_mode)linux服务器上有以下代码:

mkdir( $path, 0777, true );

当我输入如下路径时:

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

创建除最后一个目录之外的所有目录... 当我添加另一个目录,如:

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

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

尝试使用和不使用尾部斜杠

请问任何人在这里启发吗?

7 个答案:

答案 0 :(得分:13)

好的解决方案如下:没有问题。

我没有单独测试代码,但只假设以下代码没有对目录结构做任何事情......

因为我发现该目录后来被代码本身删除了。

无论如何,课程学到了......

答案 1 :(得分:8)

尝试从路径中删除尾部斜杠。

至少在mkdir文档的示例中使用它的方式。

就个人而言,我不记得遇到问题,但我通常不附加尾随斜杠,所以去尝试一下。

<强>更新

我刚尝试了你的代码,它创建了包含最后一个目录的每个目录。 我正在运行Mac OS X 10.5。不知道为什么它不适合你: - (

这就是我使用的代码:

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

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

答案 2 :(得分:2)

如果您尝试了所有内容并且无法正常工作,请在路径末尾添加一些文字,如:

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

答案 3 :(得分:1)

你的PHP版本是什么? safe_mode是否已开启?

如果是这样,那么您可能会遇到http://bugs.php.net/bug.php?id=43276

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

创建给定路径的所有目录(文件夹)的函数。无需编写代码创建给定路径的每个目录(文件夹)。它将创建所有目录(文件夹)。

喜欢:如果你想创建像
的目录结构 organizations / 1 / users / 1 /

所以你只需要像目录路径一样调用这个函数 $ directories_path =&#39; organizations / 1 / users / 1 /&#39;;
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;
    }
}

答案 6 :(得分:0)

如果你犯了我所犯的愚蠢错误并传递一个字符串,而不是模式的数字文字,你会收到这个错误。

send-keys