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

以前写过一个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');
        }

你可能感兴趣的:(php,编码)