open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { if (is_dir($path)) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($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; } }