我在 PHP 5.2.4(无安全模式)Linux 服务器上有以下代码:
mkdir( $path, 0777, true );
当我输入如下路径时:
'/path/to/create/recur/ively/'
除最后一个目录外,所有目录均已创建...当我添加另一个目录时:
'/path/to/create/recur/ively/more/'
再次,所有路径都被创建,除了最后一个......
尝试使用和不使用斜杠
任何人都可以在这里启发我吗?
我在 PHP 5.2.4(无安全模式)Linux 服务器上有以下代码:
mkdir( $path, 0777, true );
当我输入如下路径时:
'/path/to/create/recur/ively/'
除最后一个目录外,所有目录均已创建...当我添加另一个目录时:
'/path/to/create/recur/ively/more/'
再次,所有路径都被创建,除了最后一个......
尝试使用和不使用斜杠
任何人都可以在这里启发我吗?
好的,解决方案如下:没有问题。
我没有单独测试代码,只是假设以下代码没有对目录结构做任何事情......
当我发现该目录后来被代码本身删除时。
总之,吸取教训……
尝试从路径中删除尾部斜杠。
至少这就是它在mkdir
文档示例中的使用方式。
就我个人而言,我不记得有问题,但我通常不附加斜杠,所以去试试吧。
更新:
我刚刚尝试了您的代码,它创建了每个目录,包括最后一个目录。我正在运行 Mac OS X 10.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 版本是什么?是否开启了安全模式?
如果是这样,那么可能是您遇到了http://bugs.php.net/bug.php?id=43276
创建的中间目录是根据当前的 umask 设置的。你想要这样的东西
umask(0777);
mkdir($path, 0777, true);
如果你犯了我犯的愚蠢错误并传递一个字符串,而不是模式的数字文字,你会得到这个错误。
mkdir( $path, "0777", true ); // BAD - only creates /a/b
mkdir( $path, 0777, true ); // GOOD - creates /a/b/c/d
创建给定路径的所有目录(文件夹)的函数。无需编写代码创建给定路径的每个目录(文件夹)。它将创建所有目录(文件夹)。
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;
}
}