/** * 打包下载文件 * @param Request $request * @param $id * */ public function upload_file(Request $request, $id) { $res = $this->obj->where(['id' => $id])->first(); $mo = ModularModel::find($res->modular_id); $zip = new \ZipArchive(); if ($zip->open($mo->file_html) === TRUE) { dir_del(public_path('temp/')); sleep(1); mkdir('temp'); //解压缩到temp文件 $zip->extractTo('temp'); $content = $zip->getFromName('app.js');//获取压缩包文件的内容 $pos = strpos($content, 'globalData:', 1); //dd($pos); $new_content = substr($content, 0, $pos); $url_host = 'http://' . $_SERVER['HTTP_HOST']; //替换文件中的部分数据 $new_content .= "globalData:{ modular: '" . $mo->name . "',url_host:'" . $url_host . "',bid:'" . $res->id . "'}})"; //file_put_contents("./temp/app.js", $new_content, FILE_APPEND); file_put_contents("./temp/app.js", $new_content); $this->add_zip('new_temp/1.zip','temp'); $filePath = public_path('new_temp/');//此处给出你下载的文件在服务器的什么地方 $fileName = '1.zip'; //此处给出你下载的文件名 $file = fopen($filePath . $fileName, "r"); // 打开文件 //输入文件标签 Header("Content-type:application/octet-stream "); Header("Accept-Ranges:bytes "); Header("Accept-Length: " . filesize($filePath . $fileName)); Header("Content-Disposition: attachment; filename= " . $fileName); // 输出文件内容 echo fread($file, filesize($filePath . $fileName)); fclose($file); unlink($filePath.'1.zip'); //移动文件 $file='old_temp/1.zip'; //旧目录 $newFile='new_temp/1.zip'; //新目录 $this->move_zip_part($file,$newFile); exit; }else{ echo '模块文件不存在,请检查'; } } public function addFileToZip($path,$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对象 $zip->addFile($path."/".$filename); } } } @closedir($path); } //生成一个压缩包 public function add_zip($file_zip,$path) { $zip=new \ZipArchive(); if($zip->open($file_zip, \ZipArchive::OVERWRITE)=== TRUE){ if(is_dir($path)){ //给出文件夹,打包文件夹 addFileToZip($path, $zip); }else if(is_array($path)){ //以数组形式给出文件路径 foreach($path as $file){ $zip->addFile($file); } }else{ //只给出一个文件 $zip->addFile($path); } $zip->close(); //关闭处理的zip文件 } } /** * 移动zip文件 * @param $file 需要删除的文件 * @param $newFile 需要移动的文件 * */ public function move_zip_part($file,$newFile) { dir_del(public_path('new_temp/')); sleep(1); mkdir('new_temp'); copy($file,$newFile); //拷贝到新目录 }