Попытка вывести список файлов и папок с помощью рекурсивного итератора каталогов - PullRequest
0 голосов
/ 02 февраля 2019

В чем моя проблема?

Я пытаюсь использовать RecursiveDirectoryIterator Функция вместо Scandir, но не получаю требуемый ответ Json.

Я знаюэто немного длинный кусок кода, но я действительно хочу реализовать другие функции, такие как directory permissions ,owner etc using iterator Если кто-то может взглянуть на это, я буду очень благодарен.

$path = dirname(__DIR__).'/files';
$dirname = explode('/',$path);
$dirname = end($dirname);

Функция Scan Dir:

function scan($path,$dirname){
  $files = array();
  // Is there actually such a folder/file?
  if(file_exists($path)){
    foreach(scandir($path) as $f) {
      if(!$f || $f[0] == '.') {
        continue; // Ignore hidden files
      }
      $ext_to_exclude = array('php','html','.htacces');
      if(cmprExtension($f,$ext_to_exclude)) {
        continue; // Ignore some extensions
      }
      if(is_dir($path . '/' . $f)) {
        // The path is a folder
        $files[] = array(
          "name" => $f,
          "type" => "folder",
          "path" => $dirname.'/'.$f,
          "items" => scan($path.'/'.$f, $dirname.'/'.$f) // Recursively get the contents of the folder
        );
      }
      else {
        // It is a file
        $files[] = array(
          "name" => $f,
          "type" => "file",
          "path" => $dirname.'/'.$f,
          "size" => filesize($path.'/'.$f) // Gets the size of this file
        );
      }
    }
  }
    return $files;    
}

RecursiveDirectoryiterator Функция:

function scanRDI($path){
        $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS));
        $files = array(); 
        foreach ($rii as $file){
          if($file->isDir()) {
            // The path is a folder
            $files[] = array(
              "name" => $file->getFilename(),
              "type" => "folder",
              "path" => $file->getPathname(),
             "items" => scanRDI($file->getPath())
            );
          }
          else {
            // It is a file
            $files[] = array(
              "name" => $file->getFilename(),
              "type" => "file",
              "path" => $file->getPathname(),
              "size" => $file->getSize()  // Gets the size of this file
            );
          }
        }
        return $files;
    }

Json Endoing:

    header('Content-type: application/json');

    echo json_encode(array(
      "name" => $dirname,
      "type" => "folder",
      "path" => $dirname,
      "items" => scan($path) OR scanRDI($path)
    )); 

Ответы Json: (В jsonviewer измените представление на код с правой панели)

Для Scandir: https://codebeautify.org/jsonviewer/cb94493e

Для RDI: https://codebeautify.org/jsonviewer/cb9e1297

...