function download($id) { $dir = __DIR__ . '/../../files/courses/' . $id . '/'; if (file_exists($dir)) { $data = $this->get(array('id' => $id)); $i = 0; $data['name'] = preg_replace('/\\/|\\|\\?|\\%|\\*|\\:\\||\\"|\\<|\\>|\\+/', '', $data['name']); $filename = '/var/tmp/' . $data['name']; if (file_exists($filename . '.zip')) { while (file_exists($filename . "({$i}).zip")) { $i++; if ($i > 10) { break; } } } if ($i > 0) { $filename .= "({$i}).zip"; } else { $filename .= '.zip'; } Zip::packDir($dir, $filename); if (file_exists($filename)) { header('Content-Description: File Transfer'); header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="' . basename($filename) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($filename)); readfile($filename); unlink($filename); } return true; } }