如何在PHP中过滤父目录中的目录和文件?

时间:2016-03-16 09:56:03

标签: php ajax codeigniter

我有一个函数,它扫描提供的目录并返回父目录中的所有文件和子目录。

public function show_image(){
        $dir=FCPATH.'uploads/';
        $files = scandir($dir);
        $ret= array();
        $result=array();
        foreach($files as $file)
        {
            if($file == "." || $file == "..")
            continue;
            $filePath=$dir."/".$file;

            $details = array();
            $details['name']=$file;
            $details['path']=$filePath;
            $details['size']=filesize($filePath);
            $ret[] = $details;
    }

    echo json_encode($ret);
    //echo json_encode($result);
    }

基本上我使用的是Ajax,所以我正在做的是在目录中打印文件夹和文件。但问题是我真的想要过滤这个函数当前没有做的子文件和文件。 我想在最开始打印文件夹,而文件夹后面的其他文件。 $ ret包含按升序排列的数据。在视图中我遵循Ajax onSucess函数。

 onSuccess:function(files,data,xhr,pd)
{

        var src = '<?php echo base_url("uploads"); ?>'+'/'+data.file_name;
        var html = '<div class="col-sm-3 text-center"><div class="mid-folder">'; 
          html+=    '<div class="folder-content"><img src="'+src+'" class="img-container" style="max-height:100%; max-width:100%;"/></div>'
          html+=    '<a href="#" class="link-folder" title="link folder"><h3 class="title-folder">'+data.file_name.substr(0,10)+".."+' </h3></a> </div>';
          $('.hello').append(html);
          $('.ajax-file-upload-statusbar').fadeOut(1000, function(){
              $('.ajax-file-upload-statusbar').show(1000).html('Your file successfully uploaded');
          });

          $('.ajax-file-upload-statusbar').hide('slow');
}

我应该做什么,以便以不同的方式显示文件夹和文件。基本上我可以过滤$ ret中哪个对象的逻辑/方式应该被视为dir,哪个作为文件并彻底显示。

1 个答案:

答案 0 :(得分:1)

我会在服务器端使用separering文件和目录,然后将json对象发送到数组。一个是目录,另一个是文件。

$ret= array();
$result=array();
foreach($files as $file){
    if($file == "." || $file == "..")
        continue;

    $filePath=$dir."/".$file;
    $details = array();
    $details['name']=$file;
    $details['path']=$filePath;
    $details['size']=filesize($filePath);
    if(is_dir($filePath) {
        $ret['directories'][] = $details;
    }
    else {
        $ret['files'][] = $details;
    }
}

接下来,在ajax成功回调函数中创建两个循环。一个用于data.directories,一个用于data.files