1 教程-内容提要
1.1 CodeIgniter3.1教程——开始
1.2 加载静态内容
1.3 读取新闻条目
1.4 创建新闻条目
2 常规主题
2.1 CodeIgniter URL
2.2 控制器
2.3 保留名称
2.4 视图
2.5 模型
2.6 辅助函数
2.7 使用 CodeIgniter 类库
2.8 创建类库
2.9 使用 CodeIgniter 驱动器
2.10 创建驱动器
2.11 创建核心系统类
2.12 创建附属类
2.13 钩子 - 扩展框架核心
2.14 自动加载资源
2.15 公共函数
2.16 兼容性函数
2.17 URI 路由
2.18 错误处理
2.19 网页缓存
2.20 程序分析
2.21 以 CLI 方式运行
2.22 管理你的应用程序
2.23 处理多环境
2.24 在视图文件中使用 PHP 替代语法
2.25 安全
2.26 PHP 开发规范
3 类库参考
3.1 基准测试类
3.2 缓存驱动器
3.3 日历类
3.4 购物车类
3.5 配置类
3.6 Email 类
3.7 加密类(废弃)
3.8 加密类(新版)
3.9 文件上传类
3.10 表单验证类
3.11 FTP 类
3.12 图像处理类
3.13 输入类
3.14 Javascript 类
3.15 语言类
3.16 加载器类
3.17 迁移类
3.18 输出类
3.19 分页类
3.20 模板解析类
3.21 安全类
3.22 Session 类
3.23 HTML 表格类
3.24 引用通告类
3.25 排版类
3.26 单元测试类
3.27 URI 类
3.28 用户代理类
3.29 XML-RPC 与 XML-RPC 服务器类
3.30 Zip 编码类
4 数据库参考
4.1 数据库快速入门: 示例代码
4.2 数据库配置
4.3 连接你的数据库
4.4 查询
4.5 生成查询结果
4.6 查询辅助函数
4.7 查询构造器类
4.8 事务
4.9 数据库元数据
4.10 自定义函数调用
4.11 查询缓存
4.12 数据库工厂类
4.13 数据库工具类
4.14 数据库驱动器参考
5 辅助函数参考
5.1 数组辅助函数
5.2 验证码辅助函数
5.3 Cookie 辅助函数
5.4 日期辅助函数
5.5 目录辅助函数
5.6 下载辅助函数
5.7 邮件辅助函数
5.8 文件辅助函数
5.9 表单辅助函数
5.10 HTML 辅助函数
5.11 Inflector 辅助函数
5.12 语言辅助函数
5.13 数字辅助函数
5.14 路径辅助函数
5.15 安全辅助函数
5.16 表情辅助函数(废弃)
5.17 字符串辅助函数
5.18 文本辅助函数
5.19 排版辅助函数
5.20 URL 辅助函数
5.21 XML 辅助函数

Zip 编码类

2017-12-03 20:00:17
linefo
523
最后编辑:linefo 于 2017-12-03 21:07:18

Zip 编码类

CodeIgniter 的 Zip 编码类允许你创建 Zip 压缩文档,文档可以被下载到你的桌面 或者 保存到某个文件夹里。

使用 Zip 编码类

初始化类

正如 CodeIgniter 中的其他类一样,在你的控制器中使用 $this->load->library() 方法来初始化 Zip 编码类:

$this->load->library('zip');

初始化之后,Zip 编码类的对象就可以这样访问:

$this->zip

使用示例

下面这个例子演示了如何压缩一个文件,将其保存到服务器上的一个目录下,并下载到你的桌面上。

$name = 'mydata1.txt';
$data = 'A Data String!';

$this->zip->add_data($name, $data);

// Write the zip file to a folder on your server. Name it "my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip');

// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');

类参考

class CI_Zip
$compression_level = 2

使用的压缩等级。

压缩等级的范围为 0 到 9 ,9 为最高等级,0 为禁用压缩:

$this->zip->compression_level = 0;
add_data($filepath[, $data = NULL])
参数:
  • $filepath (mixed) -- A single file path or an array of file => data pairs
  • $data (array) -- File contents (ignored if $filepath is an array)
返回类型:

void

向 Zip 文档中添加数据,可以添加单个文件,也可以添加多个文件。

当添加单个文件时,第一个参数为文件名,第二个参数包含文件的内容:

$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);

$name = 'mydata2.txt';
$data = 'Another Data String!';
$this->zip->add_data($name, $data);

当添加多个文件时,第一个参数为包含 file => contents 这样的键值对的数组,第二个参数被忽略:

$data = array(
    'mydata1.txt' => 'A Data String!',
    'mydata2.txt' => 'Another Data String!'
);

$this->zip->add_data($data);

如果你想要将你压缩的数据组织到一个子目录下,只需简单的将文件路径包含到文件名中即可:

$name = 'personal/my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

上面的例子将会把 my_bio.txt 文件放到 personal 目录下。

add_dir($directory)
参数:
  • $directory (mixed) -- Directory name string or an array of multiple directories
返回类型:

void

允许你往压缩文档中添加一个目录,通常这个方法是没必要的,因为你完全可以使用 $this->zip->add_data() 方法将你的数据添加到特定的目录下。但是如果你想创建一个空目录,你可以使用它:

$this->zip->add_dir('myfolder'); // Creates a directory called "myfolder"
read_file($path[, $archive_filepath = FALSE])
参数:
  • $path (string) -- Path to file
  • $archive_filepath (mixed) -- New file name/path (string) or (boolean) whether to maintain the original filepath
返回:

TRUE on success, FALSE on failure

返回类型:

bool

允许你压缩一个已经存在于你的服务器上的文件。该方法的参数为一个文件路径,Zip 类会读取该文件的内容并添加到压缩文档中:

$path = '/path/to/photo.jpg';

$this->zip->read_file($path);

// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');

如果你希望 Zip 文档中的文件保持它原有的目录结构,将第二个参数设置为布尔值 TRUE 。例如:

$path = '/path/to/photo.jpg';

$this->zip->read_file($path, TRUE);

// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');

在上面的例子中,photo.jpg 文件将会被放在 path/to/ 目录下。

你也可以为新添加的文件指定一个新的名称(包含文件路径):

$path = '/path/to/photo.jpg';
$new_path = '/new/path/some_photo.jpg';

$this->zip->read_file($path, $new_path);

// Download ZIP archive containing /new/path/some_photo.jpg
$this->zip->download('my_archive.zip');
read_dir($path[, $preserve_filepath = TRUE[, $root_path = NULL]])
参数:
  • $path (string) -- Path to directory
  • $preserve_filepath (bool) -- Whether to maintain the original path
  • $root_path (string) -- Part of the path to exclude from the archive directory
返回:

TRUE on success, FALSE on failure

返回类型:

bool

允许你压缩一个已经存在于你的服务器上的目录(包括里面的内容)。该方法的参数为目录的路径,Zip 类会递归的读取它里面的内容并重建成一个 Zip 文档。指定目录下的所有文件以及子目录下的文件都会被压缩。 例如:

$path = '/path/to/your/directory/';

$this->zip->read_dir($path);

// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');

默认情况下,Zip 文档中会保留第一个参数中指定的目录结构,如果你希望忽略掉这一大串的树形目录结构, 你可以将第二个参数设置为布尔值 FALSE 。例如:

$path = '/path/to/your/directory/';

$this->zip->read_dir($path, FALSE);

上面的代码将会创建一个 Zip 文档,文档里面直接是 "directory" 目录,然后是它下面的所有的子目录, 不会包含 /path/to/your 路径在里面。

archive($filepath)
参数:
  • $filepath (string) -- Path to target zip archive
返回:

TRUE on success, FALSE on failure

返回类型:

bool

向你的服务器指定目录下写入一个 Zip 编码文档,该方法的参数为一个有效的目录路径,后加一个文件名, 确保这个目录是可写的(权限为 755 通常就可以了)。例如:

$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip
download($filename = 'backup.zip')
参数:
  • $filename (string) -- Archive file name
返回类型:

void

从你的服务器上下载 Zip 文档,你需要指定 Zip 文档的名称。例如:

$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"

注解

在调用这个方法的控制器里不要显示任何数据,因为这个方法会发送多个服务器 HTTP 头, 让文件以二进制的格式被下载。

get_zip()
返回:Zip file content
返回类型:string

返回使用 Zip 编码压缩后的文件数据,通常情况你无需使用该方法,除非你要对压缩后的数据做些特别的操作。 例如:

$name = 'my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

$zip_file = $this->zip->get_zip();
clear_data()
返回类型:void

Zip 类会缓存压缩后的数据,这样就不用在调用每个方法的时候重新压缩一遍了。但是,如果你需要创建多个 Zip 文档,每个 Zip 文档有着不同的数据,那么你可以在多次调用之间把缓存清除掉。例如:

$name = 'my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();

$this->zip->clear_data();

$name = 'photo.jpg';
$this->zip->read_file("/path/to/photo.jpg"); // Read the file's contents

$this->zip->download('myphotos.zip');