首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php gzip匹配unix gzip

php gzip匹配unix gzip
EN

Stack Overflow用户
提问于 2014-07-22 05:09:48
回答 2查看 67关注 0票数 0

我正在尝试使用php创建一个文件并将其压缩。如何匹配与unix中运行的gzip相同的压缩级别/头/等?

使用php

代码语言:javascript
复制
ls -l
total 8
-rw-rw-r-- 1 owner owner 486 Jul 21 17:05 file.xml.gz

在unix命令行上使用gzip:

代码语言:javascript
复制
  ls -l
 total 8
  -rw-rw-r-- 1 owner owner 479 Jul 21 17:05 file.xml.gz

在php中

代码语言:javascript
复制
  $zip = gzencode($xml,2);

我在这里尝试了从0到9作为压缩级别,我也尝试了

代码语言:javascript
复制
 $zip = gzencode($xml,x,FORCE_DEFLATE)

同样,其中x是0-9

我的问题是:

我有一个第三方供应商,他们把unzips文件解压出来,然后用它做一些有趣的事情。我遇到的问题是,当我使用php时,我得到了一个错误“无法解析file.xm.gz",当我在cli上使用gzip时,它工作得很好。我不知道第三方在做什么,也不知道它为什么会失败。它是不是像xml中的回车、空格之类的东西?我知道这是一个很难回答的问题。这是我的php xml的一个片段。

代码语言:javascript
复制
   $xml ='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
               <localRoutes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                        ';
     $xml.='<route>
             <user type="string">' . $mac . '</user>
             ';
     $xml.='<next type="regex">!^(.*$)!sip:@' . $ip . "</next>
             </route>
             ";
      $xml .= '</localRoutes>';
EN

回答 2

Stack Overflow用户

发布于 2014-07-22 07:35:21

压缩后的数据是相同的。缺少的是标题中指示文件原始名称的字段(例如,这里可能是file.xml )。这个字段是由PHP实用程序生成的,但是gzencode() gzip函数没有要处理的原始文件名,所以它不会写入这个字段。

我不知道有什么方法可以让PHP用zlib扩展生成这个字段。然而,它的缺失不太可能造成任何问题。

票数 0
EN

Stack Overflow用户

发布于 2014-07-22 14:43:41

  1. You can't.
  2. You You to.

首先,gzip和zlib ( php正在使用的)有不同的压缩算法,因此对于足够大的数据,它们永远不会产生相同的压缩数据,即使是在相同的压缩级别。

其次,正如@duskwuff所指出的,您将无法复制相同的gzip头文件,除非您提取php制作的gzip头文件并编写自己的gzip头文件。标题中的修改日期会有所不同。按照你这样做的方式,一个会有文件名,而另一个没有。不过,您可以使用-n调用gzip来不存储文件名。

第三,没有理由试图使结果相同。重要的是,这两个解压到相同的东西。他们会这么做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24874821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档