Php 生成年度和月度子目录错误
我在codeigniter中使用这个函数来检查和生成目录和子目录,如果它们不存在的话。仅进行k_上载,但在主目录“k_upoloads”中生成子目录时出错。结构应如下所示:Php 生成年度和月度子目录错误,php,codeigniter,function,Php,Codeigniter,Function,我在codeigniter中使用这个函数来检查和生成目录和子目录,如果它们不存在的话。仅进行k_上载,但在主目录“k_upoloads”中生成子目录时出错。结构应如下所示: k_uploads (main directory) -2012 (subdirectory in main directory - made per year in k_uploads) -Jan(subdirectory in 2012 - made every month in
k_uploads (main directory)
-2012 (subdirectory in main directory - made per year in k_uploads)
-Jan(subdirectory in 2012 - made every month in 2012)
-subdirx (subdirectory in Jan - holds the excel files for that month)
xxyyy.xlsx (month files in subdirx)
应创建每年和每月的目录和子目录。我不知道问题出在哪里,它可以在普通php中工作,但不能在codeigniter中工作
public function makeDir(){
$labref = $this->uri->segment(3);
$dirName='k_uploads';
echo $store_dir= date('Y').'/'.date('M').'/'.$subdirx;
if(!is_dir($dirName))
$k= mkdir($dirName, 0777);
if($k){
echo $dirName. 'dir has been created';
}else{
echo 'An error occured';
}
if(is_dir($dirName))
$w= mkdir($store_dir,0777);
if($w){
echo $sore_dir. 'subdirs have been created';
}else{
echo 'An error occured';
}
}
为了做到这一点,您需要按顺序创建每个子目录,因为PHP不会为您这样做。执行此操作时,您可能需要使用
is_dir()
检查目录是否已存在
下面是一个例子:
function createDir($dirToMake) {
$root = "/home/sites/test/www/";
$dArray = explode("/",$dirToMake);
if (file_exists($root) && is_dir($root)) {
// just a quick check
if (substr($root,0,-1) !== "/") $root .= "/";
foreach ($dArray as $v) {
if (strlen($v) == 0) continue;
$root = $root.$v."/";
if (file_exists($root) && is_dir($root)) continue;
mkdir($root);
}
}
else throw new Exception("Root directory does not exist");
}
此函数还允许出现常见错误(//是其中之一),并将循环执行,如果子目录体系结构不存在,则创建所需的子目录体系结构。
mkdir
具有可设置的递归标志。这将创建完整路径。看
所以你应该使用mkdir($store\u dir,0777,true)
该函数可能如下所示:
public function makeDir(){
$subdirx = $this->uri->segment(3);
$store_dir= APPPATH . 'k_uploads/' . date('Y').'/'.date('M').'/'.$subdirx;
if(!is_dir($store_dir)) {
return mkdir($dirName, 0777, true);
} else {
return true;
}
}
不确定是不是打字错误。。。但是你失踪了如果(is_dir($dirName))高于$w=…我假设
k_上传
是在您的服务器根目录中进行的,因为您没有指定完整路径?我认为您只需要在创建子目录时指定完整路径。即mkdir($dirName./'.$store_dir,0777)
另外,您应该在if语句之外声明$w,或者在中添加一个else。否则,当找不到$w变量时,最后一个if语句将出错