我正在尝试使用php创建一个文件并将其压缩。如何匹配与unix中运行的gzip相同的压缩级别/头/等?
使用php
ls -l
total 8
-rw-rw-r-- 1 owner owner 486 Jul 21 17:05 file.xml.gz在unix命令行上使用gzip:
ls -l
total 8
-rw-rw-r-- 1 owner owner 479 Jul 21 17:05 file.xml.gz在php中
$zip = gzencode($xml,2);我在这里尝试了从0到9作为压缩级别,我也尝试了
$zip = gzencode($xml,x,FORCE_DEFLATE)同样,其中x是0-9
我的问题是:
我有一个第三方供应商,他们把unzips文件解压出来,然后用它做一些有趣的事情。我遇到的问题是,当我使用php时,我得到了一个错误“无法解析file.xm.gz",当我在cli上使用gzip时,它工作得很好。我不知道第三方在做什么,也不知道它为什么会失败。它是不是像xml中的回车、空格之类的东西?我知道这是一个很难回答的问题。这是我的php xml的一个片段。
$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>';发布于 2014-07-22 07:35:21
压缩后的数据是相同的。缺少的是标题中指示文件原始名称的字段(例如,这里可能是file.xml )。这个字段是由PHP实用程序生成的,但是gzencode() gzip函数没有要处理的原始文件名,所以它不会写入这个字段。
我不知道有什么方法可以让PHP用zlib扩展生成这个字段。然而,它的缺失不太可能造成任何问题。
发布于 2014-07-22 14:43:41
首先,gzip和zlib ( php正在使用的)有不同的压缩算法,因此对于足够大的数据,它们永远不会产生相同的压缩数据,即使是在相同的压缩级别。
其次,正如@duskwuff所指出的,您将无法复制相同的gzip头文件,除非您提取php制作的gzip头文件并编写自己的gzip头文件。标题中的修改日期会有所不同。按照你这样做的方式,一个会有文件名,而另一个没有。不过,您可以使用-n调用gzip来不存储文件名。
第三,没有理由试图使结果相同。重要的是,这两个解压到相同的东西。他们会这么做的。
https://stackoverflow.com/questions/24874821
复制相似问题