12

我在 PHP 5.2.4(无安全模式)Linux 服务器上有以下代码:

mkdir( $path, 0777, true );

当我输入如下路径时:

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

除最后一个目录外,所有目录均已创建...当我添加另一个目录时:

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

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

尝试使用和不使用斜杠

任何人都可以在这里启发我吗?

4

7 回答 7

14

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

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

当我发现该目录后来被代码本身删除时。

总之,吸取教训……

于 2009-09-23T06:56:10.950 回答
8

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

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

就我个人而言,我不记得有问题,但我通常不附加斜杠,所以去试试吧。

更新

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

那是我使用的代码:

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

对不起,我在这里似乎没有任何帮助。

于 2009-09-09T11:46:57.623 回答
2

如果您尝试了所有方法但仍然无法正常工作,请在路径末尾添加一些文本,例如:

$path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway';
于 2009-09-09T12:05:21.797 回答
1

你的 PHP 版本是什么?是否开启了安全模式?

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

于 2009-09-09T12:09:43.707 回答
1

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

umask(0777);
mkdir($path, 0777, true);
于 2015-01-15T12:10:21.177 回答
1

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

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

mkdir( $path, 0777, true ); // GOOD - creates /a/b/c/d
于 2017-06-26T03:18:49.003 回答
0

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

Like : 如果你想创建像
organizations/1/users/1/这样的目录结构

所以你只需要像
$directories_path = 'organizations/1/users/1/';这样的目录路径来调用这个函数。
创建上传目录($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;
    }
}
于 2016-06-20T11:16:04.637 回答