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

PHP mkdir($recursive=true)跳过最后一个目录,php,recursion,path,filesystems,mkdir,Php,Recursion,Path,Filesystems,Mkdir,我在PHP5.2.4(无安全模式)linux服务器上获得了以下代码: mkdir( $path, 0777, true ); 当我输入如下路径时: '/path/to/create/recur/ively/' 除最后一个目录外,所有目录都已创建。。。 当我添加另一个目录时,如: '/path/to/create/recur/ively/more/' 同样,除了最后一个路径之外,所有路径都会被创建 已尝试使用和不使用尾部斜杠 有人能在这里告诉我吗?尝试从路径中删除尾随斜杠 至少在mkdir文

我在PHP5.2.4(无安全模式)linux服务器上获得了以下代码:

mkdir( $path, 0777, true );
当我输入如下路径时:

'/path/to/create/recur/ively/'
除最后一个目录外,所有目录都已创建。。。 当我添加另一个目录时,如:

'/path/to/create/recur/ively/more/'
同样,除了最后一个路径之外,所有路径都会被创建

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


有人能在这里告诉我吗?

尝试从路径中删除尾随斜杠

至少在
mkdir
文档的示例中是这样使用的

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

更新

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

这就是我使用的代码:

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

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

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

你的PHP版本是什么?安全模式打开了吗


如果是这样,那么可能是您正在经历

确定解决方案如下:没有问题

我没有单独测试代码,只是假设下面的代码对目录结构没有任何影响

我发现这个目录后来被代码本身删除了


无论如何,吸取的教训…

创建的中间目录是基于当前umask设置的。您想要这样的内容吗

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

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

Like:如果要创建目录结构,如
组织/1/用户/1/

因此,您只需使用目录路径调用此函数,如
$directories\u 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;
    }
}

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

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

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

请发布您正在使用的PHP的确切版本。另外,您的主机是否启用了安全模式?您的错误报告级别如何?如果出现错误,将发出E_警告。安全模式已关闭,但您的PHP版本是否包含类似suhosin的内容?您是如何(从何处)安装PHP的?从“香草”编译而来php.net源代码?通过您发行版的软件包管理器(哪一个以及软件包的确切名称)?函数php_plain_files_mkdir()(负责php函数mkdir(x,y,true))已经有一段时间没有变化了,我也没有发现相关的错误。因此,让我总结一下:问题是“递归mkdir无法正常工作”,答案是“哦,天哪,我犯了一个错误,后来在代码中删除了目录”。然后我真的想知道为什么这个用户因为这些有价值的信息获得了26张赞成票?我不认为其他14个人也有同样的问题…这就是我在当前代码中“解决”它的方式…但这真的没有任何意义…这是一个肮脏的工作,无助于问题的提出…>有人能在这里启发我吗?@Sodomere-enligh十你用什么?@Andre-完全同意。否则副作用可能会触发。我同意这是一个解决办法,但嘿,他说他测试了人们在没有安全模式的情况下发布的5.2.4解决方案,所以它不适用,我也尝试过使用和不使用尾部斜杠,所以。。。。