您的位置:首页 > 编程语言 > PHP开发

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

2016-03-11 16:24 1746 查看
以前写过一个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 编码