2009-09-09 94 views
12

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

mkdir($path, 0777, true); 
当我进入像路径

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

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

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

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

试图既没有结尾的斜杠

能ANY1开导我在这里吗?

+0

请发布您正在使用的PHP的确切版本。另外,您的主机是否在启用safe_mode的情况下运行? – 2009-09-09 12:01:41

+0

什么是您的error_reporting级别?如果出现问题,则提出E_WARNING。安全模式关闭,但您的PHP版本是否包含suhosin?你如何(以及从哪里)安装PHP?从“香草”php.net源代码编译?通过你的发行版的包管理器(它是哪一个,包的确切名称是什么)?函数php_plain_files_mkdir()(负责PHP函数mkdir(x,y,true))并没有改变很长一段时间,我还没有在http://bugs.php.net找到相关的错误 – VolkerK 2009-09-09 13:42:27

+0

因此,让我总结:问题是“递归mkdir无法正常工作”,答案是“哦,我犯了一个错误,并在代码中稍后删除了该目录”。那么我真的很想知道为什么这个用户有26个upvotes这个有价值的信息?我不认为其他人有同样的问题... – rob74 2018-03-08 16:43:49

回答

14

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

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

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

无论如何,课程了...

8

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

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

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

UPDATE

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

这是我使用的代码:

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

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

+0

这是关于我做的第一件事,但它仍然产生相同的结果... – NDM 2009-09-09 11:48:25

2

如果你想尽一切和它。一直没有工作,再加入一些文字类的路径的末尾:

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

这就是我在当前代码中'解决'它... 但它没有任何意义...... – NDM 2009-09-09 12:06:38

+0

这是一个肮脏的解决方法,并没有帮助问题... >请问任何1在这里请赐教? – Gnark 2009-09-09 12:16:21

+1

你永远不应该使用你不明白的代码。 – 2009-09-09 12:33:05

1

什么是你的PHP版本的safe_mode开启

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

+0

5.2.4没有safe_mode,所以它不适用,我也尝试过和没有尾随斜线,所以.... – NDM 2009-09-09 12:25:21

0

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

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

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

一样:如果你要创建的目录结构像
组织/ 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; 
    } 
} 
0

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

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

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