public static function readDirectory($dir, $recursively, $called = false) { if (self::$_files) { if ($dir) { $files = preg_grep('/^' . str_replace('/', '\\/', preg_quote($dir . '/')) . '/', array_keys(self::$_files)); } else { $files = array_keys(self::$_files); } if (!count($files)) { header("HTTP/1.0 404 Not Found"); return; } $f = array(); $d = array(); foreach ($files as $i => $name) { $fname = substr($name, $dir ? strlen($dir) + 1 : 0); if (strpos($fname, '/') === false) { // that's a file $f[$fname] = 1; } else { // that's a directory $dirName = substr($fname, 0, strpos($fname, '/')); if ($recursively) { $d[$dirName] = self::readDirectory((strlen($dir) ? $dir . '/' : '') . $dirName, true, true); } else { $d[$dirName] = 2; } } } $final = array_merge_recursive($f, $d); return $called ? $final : json_encode($final); } if (is_file($dir)) { return 'That\'s a file'; } if (!is_dir($dir)) { header("HTTP/1.0 404 Not Found"); return; } return json_encode(Lib::readDirectory($dir, !!strlen($recursively), false)); }