我希望直接用fopen函数直接打开压缩包内的一个文件,
如果是zip格式,则可用以下方法打开
$fp = fopen("zip:///tmp/12.zip#myfilein.txt", "r");但同样的方法便无法操作gzip格式的压缩包?
每当如下如下方式打开的时候,都被告知 failed to open stream: operation failed 错误
fopen("compress.zlib:///tmp/12.tar.gz#myfilein.txt", "r");ps:仔细查了很多遍,压缩包的路径以及压缩包内部的那个文件都是存在的,想知道这种方法针对gz格式的压缩包是不可行呢?还是我用错了方法?

解决方案 »

  1.   

    不是还有 compress.bzip2:// 吗?
    试试可能编码格式上有差异
      

  2.   

    你要分析zip编码吗?不是有相关的类操作压缩文件
      

  3.   


    徐老大你好,compress.bzip2也试了,跟zlib的结果是一样的,我觉得这样不行是有他的道理的,
    不同于zip格式,gz和bz2对目录的压缩都是先用tar打包然后再压缩tar文件,也就是gz和bz2不借助tar的情况下只能压缩文件。
    zip对于目录则是打包且压缩,并且内建了目录结构,这样便可以用路径的方法直接访问到压缩进去的文件。以上是我的理解,如不对请斧正。另外问一下,有没有别的办法解决我的问题?因为bz2和gz压缩效率相对zip大不少,我还是倾向于使用这两种格式,但就是没有找到方法直接定位压缩进去的文件并对其进行操作。谢谢
      

  4.   


    不是要分析编码,是希望在php程序中够访问到压缩包中的文件
      

  5.   

    那么你没有尝试过 zlib 函数组吗? 他是可以操作 .gz 文件的
      

  6.   


    试过了,最开始用得就是,对于将若干文件压缩而成的.gz文件,这些函数只能读出tar文件的内容,而不像ZipArchive类能像处理目录一样在zip文件内添加目录、增删文件等。这是我目前只能用zip格式的原因。如果也能做到ZipArchive一样,就用.gz或.bz2格式 
      

  7.   

    用gzopen吧,直接打开文件,再用gzread读取,用gzwrite写入