芒果小站

  1. 全球最具业界良心的主机 - Linode

    毫无疑问,目前做得最好的主机供应商

    猛击这里查看

  2. 芒果小站目前使用的主机 - Linode

    客服响应快,随时退款,XEN 架构稳定

    猛击这里查看

  3. 最好的日本东京线路主机 - Linode

    可选弗里蒙特、达拉斯、亚特兰大、纽瓦克、伦敦、东京机房

    猛击这里查看

  • 1
  • 2
  • 3
切换到精简模式
5

Codeigniter 框架 Zip 编码类中 read_dir 方法的 bug

作者 芒果/分类 代码/发布于 2012-07-24 23:13

Codeigniter 框架的压缩解码类,其中的 read_dir 方法,允许你压缩一个服务器某处存在的文件夹(以及它里面的文件和子文件夹)。

提供一个文件夹路径,zip 类将递归读取它并重新创建添加到存档。 你所提供的路径下面的所有文件都会被压缩进来,也包括所有子文件夹。

例如:

$path = '/path/to/your/directory/';
$this->zip->read_dir($path);

默认 Zip 文件会把第一个参数的完整文件夹路径保存到Zip文件里。如果你想忽略目标路径之前的文件夹结构,你可以传递 FALSE (布尔值) 到第二个参数。

例如:

$path = '/path/to/your/directory/';
$this->zip->read_dir($path, false);

这将创建一个包括 “directory” 在内的 ZIP 文件, 所有的子文件夹被正确地保存在里面, 但是不包括此文件夹 /path/to/your.

官方文档只提到了两个参数,源码里其实设置了三个:

read_dir($path, $preserve_filepath = TRUE, $root_path = NULL)

而通常,在框架运行环境内部,取得路径有几种方法:

APPPATH – 对应 Codeigniter 根目录,即 application/
FCPATH – 对应磁盘分区根目录,即 D:\xxx\codeigniter 根目录\

当使用 FCPATH 之类的方式获取目录绝对路径时,由于源码中处理了路径中反斜杠,导致前后 $root_path 值不一致,会出现第二参数 false 设置无效的问题。

参考资料:http://codeigniter.org.cn/user_guide/libraries/zip.html

版权所有,转载请注明出处。
转载自 <a href="http://mangguo.org/codeigniter-framework-zip-code-class-read_dir-method-bug/" title="Codeigniter 框架 Zip 编码类中 read_dir 方法的 bug" rel="bookmark">Codeigniter 框架 Zip 编码类中 read_dir 方法的 bug | 芒果小站</a>
如果喜欢这篇文章,欢迎订阅芒果小站以获得最新内容。

已经有 5 条群众意见

  1. WWW.ZGYCWX.COM /2012-07-26 11:39

    呵呵!学习了 回应

    #1
  2. 流水线 /2012-07-27 16:51

    我也是来学习的 回应

    #2
  3. 裘皮大衣 /2012-07-30 14:45

    我也学习了,哈哈 回应

    #3
  4. ?
    Codeigniter 框架 Zip 编码类中 read_dir 方法的 bug | wordpress主题下载|wordpress教程|wordpress 插件| wordpress主机 /2012-08-03 14:09

    […] © 2010 芒果小站 | 固定链接 | 3 条评论 | 标签 CodeIgniter, PHP 芒果小站No related posts. 本文标签:Codeigniter, […] 回应

    #4
  5. 墨慈。 /2014-12-16 19:29

    刚刚本人也碰到这个问题,看了大大的文章之后茅厕顿开,去看了下CI的源码现在如下修改打包成功,放上来大家一起研究下
    system/libraries/zip.php
    $name = str_replace(“\\”, “/”, $path);下面新增一行
    $root_path = str_replace(“\\”, “/”, $root_path); 回应

    #5

下面我简单说几句