<?php
/**
* Zip 文件包工具
*
* @author wengxianhu
* @date 2013-08-05
*/
class ZipFolder
{
protected $zip;
protected $root;
protected $ignored_names;
public function __construct(){
$this->zip = new ZipArchive;
}
/**
* 解压zip文件到指定文件夹
*
* @access public
* @param string $zipfile 压缩文件路径
* @param string $path 压缩包解压到的目标路径
* @return booleam 解压成功返回 true 否则返回 false
*/
public function unzip ($zipfile, $path) {
if ($this->zip->open($zipfile) === true) {
$file_tmp = @fopen($zipfile, "rb");
$bin = fread($file_tmp, 15); //只读15字节 各个不同文件类型,头信息不一样。
fclose($file_tmp);
/* 只针对zip的压缩包进行处理 */
if (true === $this->getTypeList($bin))
{
$result = $this->zip->extractTo($path);
$this->zip->close();
return $result;
}
else
{
return false;
}
}
return false;
}
/**
* 创建压缩文件
*
* @access public
* @param string $zipfile 将要生成的压缩文件路径
* @param strng $folder 将要被压缩的文件夹路径
* @param array $ignored 要忽略的文件列表
* @return booleam 压缩包生成成功返回true 否则返回 false
*/
public function zip ($zipfile, $folder, $ignored = null) {
$this->ignored_names = is_array($ignored) ? $ignored : $ignored ? array($ignored) : array();
if ($this->zip->open($zipfile, ZIPARCHIVE::CREATE) !== true) {
throw new Exception("cannot open <$zipfile>\n");
}
$folder = substr($folder, -1) == '/' ? substr($folder, 0, strlen($folder)-1) : $folder;
if(strstr($folder, '/')) {
$this->root = substr($folder, 0, strrpos($folder, '/')+1);
$folder = substr($folder, strrpos($folder, '/')+1);
}
$this->createZip($folder);
return $this->zip->close();
}
/**
* 递归添加文件到压缩包
*
* @access private
* @param string $folder 添加到压缩包的文件夹路径
* @param string $parent 添加到压缩包的文件夹上级路径
* @return void
*/
private function createZip ($folder, $parent=null) {
$full_path = $this->root . $parent . $folder;
$zip_path = $parent . $folder;
$this->zip->addEmptyDir($zip_path);
$dir = new DirectoryIterator($full_path);
foreach($dir as $file) {
if(!$file->isDot()) {
$filename = $file->getFilename();
if(!in_array($filename, $this->ignored_names)) {
if($file->isDir()) {
$this->createZip($filename, $zip_path.'/');
}else {
$this->zip->addFile($full_path.'/'.$filename, $zip_path.'/'.$filename);
}
}
}
}
}
/**
* 读取压缩包文件与目录列表
*
* @access public
* @param string $zipfile 压缩包文件
* @return array 文件与目录列表
*/
public function fileList($zipfile) {
$file_dir_list = array();
$file_list = array();
if ($this->zip->open($zipfile) == true) {
for ($i = 0; $i < $this->zip->numFiles; $i++) {
$numfiles = $this->zip->getNameIndex($i);
if (preg_match('/\/$/i', $numfiles))
{
$file_dir_list[] = $numfiles;
}
else
{
$file_list[] = $numfiles;
}
}
}
return array('files'=>$file_list, 'dirs'=>$file_dir_list);
}
/**
* 得到文件头与文件类型映射表
*
* @author wengxianhu
* @date 2013-08-10
* @param $bin string 文件的二进制前一段字符
* @return boolean
*/
private function getTypeList ($bin)
{
$array = array(
array("504B0304", "zip")
);
foreach ($array as $v)
{
$blen = strlen(pack("H*", $v[0])); //得到文件头标记字节数
$tbin = substr($bin, 0, intval($blen)); ///需要比较文件头长度
if(strtolower($v[0]) == strtolower(array_shift(unpack("H*", $tbin))))
{
return true;
}
}
return false;
}
}
分享到:
相关推荐
PHP Zip压缩包、压缩操作类,操作文件的压缩和解压
### PHP zip压缩包操作类知识点详解 #### PHP ZipArchive类简介 PHP内置了`ZipArchive`类,它提供了一系列方法来处理ZIP压缩包。通过这个类,PHP能够创建新的zip文件,添加文件到zip中,读取zip文件中的内容,以及...
在这个“php中mysql数据库操作类.zip”压缩包中,很可能包含了一个基于MySQLi或PDO实现的自定义数据库操作类。 一个基础的PHP MySQL数据库操作类通常包括以下组件: 1. **连接函数**:用于建立与MySQL服务器的连接...
2. **解压ZIP文件**:PHP的`ZipArchive`类提供了对ZIP文件的读取和操作。首先,打开ZIP文件,然后遍历每个条目并提取到目标目录。 ```php function extractZip($zipFilePath, $destinationDir) { $zip = new Zip...
例如,可以使用`shell_exec()`函数调用系统命令(如`zip`命令行工具)来创建ZIP,或者使用第三方库如PHPZip(https://github.com/Spipu/PhpZip)来提供更多高级功能,如支持读取流、加密等。 总的来说,PHP生成ZIP...
这个"php ftp操作类.zip"文件提供了一个专为PHP设计的FTP操作类,使得开发者能够更方便地执行这些操作。下面我们将详细探讨FTP操作类的基本概念、常用方法以及如何使用此类。 FTP操作类是将FTP相关的功能封装在一起...
这个“php实现的加密解密处理类”压缩包文件提供了一个专门用于加密和解密操作的PHP类库,使得开发人员能够更方便、安全地处理这些关键信息。下面将详细探讨相关的知识点。 首先,我们来了解一下加密的基本概念。...
这个“php文件目录操作类”压缩包提供了一个实用的工具,帮助开发者更方便地处理这些任务。下面我们将深入探讨这个类的一些核心功能以及相关的PHP文件系统函数。 首先,类库的核心功能包括: 1. 建立文件夹:在PHP...
在这个案例中,我们有一个名为"php的数组操作类"的压缩包,它提供了一些实用方法,帮助我们更有效地对数组进行操作。下面将详细介绍这些功能及其相关知识点。 首先,该类包含了一个方法,用于从数组中删除空白元素...
标题提到的"php连接mysql数据库操作类.zip"是一个压缩包,其中包含了一个PHP类,专门用于处理与MySQL数据库的交互,如查询、更新、删除等常见操作。这个类库可能是为了简化数据库操作,提高代码的可读性和可维护性而...
这个压缩包`phpmailer.zip`包含了使用`phpMailer`所需的主要文件。 1. **phpmailer_doc.html**: 这个文件是`phpMailer`的文档,提供了类库的详细使用说明和API参考。通过阅读这份文档,开发者可以了解到如何初始...
在PHP中,将多个图片压缩成ZIP文件是一个常见的任务,特别是在网站开发中处理用户上传的图片时。这个过程涉及到文件操作、编码处理以及利用PHP...通过熟练运用这些技巧,我们可以创建出一个兼容中文文件名的ZIP压缩包。
标题中的"archive_php+mysql数据库操作类 v1.0 [江西新余电信].zip.zip"表明这是一个关于PHP和MySQL数据库操作的类库,版本为1.0,且可能由江西新余电信的相关开发者或团队创建。这个压缩包可能是用于帮助开发者更...
PHP内置了`ZipArchive`类,可以方便地进行文件和目录的压缩操作: 1. **创建ZipArchive实例**:`$zip = new ZipArchive();` 2. **打开或创建ZIP文件**:使用`open`方法打开现有的ZIP文件或创建新的,例如`$zip->...
在压缩包中的 `apache http serve64.zip` 文件是适用于 64 位操作系统的 Apache 安装包。解压后,你需要找到 `httpd.conf` 并根据你的需求进行基本配置。例如,将 `DocumentRoot` 指向你的网站内容目录,确保 Apache...
php对图片文件的操作主要是利用GD库扩展。当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码。当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成...
以下是一个简单的示例,展示了如何使用PHP创建一个包含网站文件的ZIP压缩包: ```php <?php $zip = new ZipArchive(); $filename = "website_backup.zip"; if ($zip->open($filename, ZipArchive::CREATE) === TRUE...
TbsZip是一个 PHP 的类用来读写 Zip 压缩文件包,该类无需 PHP 扩展或者是临时文件。TbsZip 可以对压缩文档中的文件进行读、写、修改和删除操作。详细使用方法请看这里。 相关阅读 同类推荐:站长常用源码
标题中的“index.php_QQ浏览器压缩包.zip”表明这是一个与Web开发相关的压缩文件,特别是与PHP语言和QQ浏览器有关。由于“index.php”是Web服务器上默认的首页文件,我们可推断这个压缩包可能包含了一个网站的入口...