PHP 打包文件代码实例

/**
  * @comments: 打包附件zip方法
  * @author: zhuanghuidong
  * @time:
  * @param $filename
  * @param $attachments
  */
private function _file_to_zip($filename,$attachments)
{
    if (!file_exists($filename)) {
        //重新生成文件
        $zip = new \ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
        if ($zip->open($filename, \ZipArchive::CREATE) !== TRUE) {
            exit('无法打开文件,或者文件创建失败');
        }
        foreach ($attachments as $val) {
            if (file_exists($val)) {
                $zip->addFile($val);//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下
            }
        }
        $zip->close();//关闭
    }
    foreach ($attachments as $files_path){
        @unlink ($files_path);//删除原始文件
    }
}

/**
 * @comments: 执行tar命令的方式
 * @author: zhuanghuidong
 * @time:
 * @param $filename
 * @param $attachments
 */
private function _file_to_tar($filename,$attachments)
{
    $path_arr = explode('/',$filename);
    $tar_file_name = $path_arr[count($path_arr)-1];
    $str=str_replace($tar_file_name,"",$filename);
    $ss_txt = '';
    foreach ($attachments as $files_path){
        $path_arr = explode('/',$files_path);
        $files_name = $path_arr[count($path_arr)-1];
        $ss_txt = $ss_txt.$files_name." ";
    }
    $command = 'tar -C '.$str.' -cvf '.$filename." ".$ss_txt;
    system($command);//命令行打包
    foreach ($attachments as $files_path){
        @unlink ($files_path);//删除原始文件
    }
}