open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(Special::$source_path)); foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen(Special::$source_path) + 1); $zip->addFile($filePath, $relativePath); } } $zip->close(); } else { return response()->json(['error' => 'Failed to create ZIP archive'], 500); } } public static function get_tree(string $dir, &$results = array()){ $files = scandir($dir); foreach($files as $value){ $path = realpath($dir.DIRECTORY_SEPARATOR.$value); if(!is_dir($path)) { $results[] = $path; } else if($value != "." && $value != "..") { self::get_tree($path, $results); $results[] = $path; } } return $results; } }