解决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编码时,始终无法检测文件。
同样,filesize和readfile也有问题。basename 等等等等关于文件和文件名的操作。
一般的方法是老生常谈的
iconv转码或者用mb_convert_encoding
为了让测试机和服务器都顺畅的执行所以有以下示例代码:
同样的函数问题还有很多:
file_exists
使用file_exists时如果你文件名或路径含中文,且php在uft8编码时,始终无法检测文件。
同样,filesize和readfile也有问题。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'); }
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- ASP编码必备的8条原则
- apache 环境下 php 的配置注意事项
- XML指南——XML编码
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码