解决php ZipArchive执行后无法生成zip文件的问题

来源:互联网 发布:深圳国税开票软件 编辑:程序博客网 时间:2024/05/22 03:50

以前写过一个zip压缩的东东,当时zip包用的是随机名,所以一路顺畅。但是今天下午遇到一个抓狂的问题就是zip程序执行之后没发现生成zip文件,代码并没有报错,折腾半天原来是系统编码问题。目前一般php都是utf8下写的,但是中文win下的ANSI用的是GBK编码,所以还得转GBK。
同样的函数问题还有很多:
file_exists
使用file_exists时如果你文件名或路径含中文,且php在uft8编码时,始终无法检测文件。
同样,filesizereadfile也有问题。basename 等等等等关于文件和文件名的操作。
一般的方法是老生常谈的
iconv转码或者用mb_convert_encoding

为了让测试机和服务器都顺畅的执行所以有以下示例代码:

      $fileName="中文名的zip哟";       $this->fileName=$fileName;        $this->fileNameGBK=iconv("utf-8", "GB2312//IGNORE", $this->fileName);        //从服务器上添加文件的路径数组。随便塞点路径进去        $files = array ();        //让basename支持中文        function get_basename($filename){    return preg_replace('/^.+[\\/]/', '', $filename);}        $zip = new ZipArchive;        //看看是windows还是linux系统        if(stripos($_SERVER['SystemRoot'],'windows')!==false){        $this->zipName=$this->fileNameGBK.".zip";        }else{            $this->zipName=$this->fileName.".zip";        }        $this->zipFilePath=$dir."/".$this->zipName;        //生成并打开zip        $res = $zip->open( $this->zipFilePath, ZIPARCHIVE ::CREATE);        if ($res === TRUE) {            foreach ($files as $v) {                $zip->addFile($v,get_basename($v));                //unlink($v);            }            $zip->close();            //echo 'ok';        } else {            exit('failed:cant open the zip to add file');        }
0 0