Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php gzip匹配unix gzip_Php_Unix_Gzip - Fatal编程技术网

php gzip匹配unix gzip

php gzip匹配unix gzip,php,unix,gzip,Php,Unix,Gzip,我正在尝试使用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);

我正在尝试使用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

我的问题是:

我有一个第三方供应商,它接受gzip文件,解压它,并用它做有趣的事情。我遇到的问题是,当我使用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>';

压缩数据是相同的。缺少的是标题中的一个字段,指示文件的原始名称,例如,这里可能是file.xml。此字段由gzip实用程序生成,但gzencode PHP函数没有原始文件名,因此它不编写此字段

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

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

其次,正如@Dashwuff所指出的,您将无法复制相同的gzip头,除非您拔出php制作的gzip头并编写自己的gzip头。标题中的修改日期将不同。按照您的方式,一个有文件名,另一个没有。尽管可以使用-n调用gzip以不存储文件名


第三,没有理由试图使结果一致。重要的是,两者都解压缩到同一个东西。他们会的。

首先:嗯?gzencode生成符合RFC1952的输出,与gzip相同。相同的压缩算法和所有东西。兼容,是的。相同,否。相同数据有许多可能的兼容压缩。