我正在尝试从数组中创建一个文件夹树,从字符串中获取。
$folders = str_split(564);
564实际上可以是任何数字。目标是创建一个类似/5/6/4
的文件夹结构。我已经设法在一个位置创建所有文件夹,使用从另一个线程灵感的代码-
for ($i=0;$i<count($folders);$i++) {
for ($j=0;$j<count($folders[$i]);$j++) {
$path .= $folders[$i][$j] . "/";
mkdir("$path");
}
unset($path);
}
,但这样我得到所有文件夹在相同的包含路径。此外,如何在磁盘上的特定位置创建这些文件夹?不是很熟悉高级php,抱歉:(
谢谢。
这很简单。
对文件夹数组的每个循环执行a,并创建一个字符串,在每个循环上附加下一个子文件夹:
<?php
$folders = str_split(564);
$pathToCreateFolder = '';
foreach($folders as $folder) {
$pathToCreateFolder .= DIRECTORY_SEPARATOR . $folder;
mkdir($folder);
}
您还可以添加基本路径,其中文件夹应该创建到初始化的$pathToCreateFolder
。
这里有一个演示:http://codepad.org/aUerytTd
或者像Michael在注释中提到的那样,只写一行:
mkdir(implode(DIRECTORY_SEPARATOR, $folders), 0777, TRUE);
TRUE标志允许mkdir递归创建文件夹。内爆把目录的部分像5/6/4
一样放在一起。DIRECTORY_SEPARATOR是一个PHP常量,用于unix机器上的斜杠(/)或windows上的反斜杠(')。
为什么不直接做:
<?php
$directories = str_split(564);
$path = implode(DIRECTORY_SEPARATOR, $directories);
mkdir($path, 0777, true);
不知道自己到底在做什么,但这里有一些提示。
有递归mkdir:if(!file_exists($dir)) // check if directory is not created
{
@mkdir($dir, 0755, true); // create it recursively
}
您想要的路径可以在两个函数调用中创建,并以一些起始路径作为前缀:
$path = 'some/path/to/cache';
$cache_node_id = 4515;
$path = $path.'/'.join('/', str_split($cache_node_id));
结果路径可用于使用上面的代码创建文件夹
这里有一对函数/方法
function getPath($node_id, $path = 'default_path')
{
return $path.'/'.join('/', str_split($node_id))
}
function createPath($node_id, $path = 'default_path');
{
$path = getPath($node_id, $path);
if(!file_exists($path)) // check if directory is not created
{
@mkdir($path, 0755, true); // create it recursively
}
}
有了这些,你可以很容易地在任何你想要的地方创建这样的文件夹,并根据你的号码找到它们。
如前所述,我从一个朋友那里得到的解决方案是
$folders = str_split(564);
mkdir(implode('/',$folders),0777,true);
另外,为了添加在变量中定义的位置,我使用
$folders = str_split($idimg);
mkdir($path_defined_earlier. implode('/',$folders),0777,true);
所以感谢所有的答案,似乎这是正确的方式来处理这个。现在的问题是,我需要创建的路径,那么我如何将它存储在一个变量中?对不起,如果这违反了任何规则,如果我需要创建一个新的线程,我会这样做…