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


How Can I filter dir and files inside the parent dir in PHP?

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

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,哪个对象应该被视为文件并彻底显示它。

我会在服务器端分离文件和目录,然后将 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.