open($dest, ZipArchive::CREATE)) { return false; } $source = str_replace('\\', '/', realpath($source)); if (is_dir($source) === true) { //创建件一个目录迭代器 $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source)); foreach ($files as $file) { $file = str_replace('\\', '/', $file); //忽略当前目录和上级目录 if (in_array(substr($file, strrpos($file, '/') + 1), array('.', '..'))) { continue; } if (is_dir($file) === true) { //创建一个子目录 $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file) === true) { //创建一个子文件 $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } else if (is_file($source) === true) { //创建文件根目录下的文件 $zip->addFromString(basename($source), file_get_contents($source)); } } $zip->close(); } } protected function addFileToZip(string $path, ZipArchive $zip) { $handler = opendir($path); //打开当前文件夹由$path指定。 while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") { //文件夹文件名字为'.'和‘..’,不要对他们进行操作 if (is_dir($path . "/" . $filename)) { $this->addFileToZip($path . "/" . $filename, $zip); } else { $zip->addFile($path . "/" . $filename); } } } @closedir($handler); } /** * 删除临时路径 * @param $path */ public function deleteDir($path) { if (is_dir($path)) { // $dirs = scandir($path); foreach ($dirs as $dir) { if ($dir != '.' | $dir != '..') { $sonDir = $path . '/' . $dir; if (is_dir($sonDir)) { $this->deleteDir($sonDir); @rmdir($sonDir); } else { @unlink($sonDir); } } } @rmdir($path); } } /** * 文件下载 * @param $file */ public function downLoad($file) { if (file_exists($file)) { $openFile = fopen($file, 'r'); //返回文件类型 Header('Content-type: application/octet-iostream'); //返回文件的字节大小 Header('Accept-Range: bytes'); //返回文件大小 Header('Accept-Length: ' . $file); //这里对客户端弹出的对话框,对应的文件名 Header('Content-disposition: filename=' . substr($file, strrpos($file, '/') + 1)); $buffer = 1024; while (!feof($openFile)) { $file_data = fread($openFile, $buffer); echo $file_data; } fclose($file); @unlink($file); } else { echo '下载文件不存在'; } } }