使用GZIP下载文件


Downloading files using GZIP

我有很多xml文件,我使用file或file_get_content下载,但是服务器管理员告诉我通过GZIP下载效率更高。我的问题是如何包含GZIP,因为我以前从未这样做过,所以这个解决方案对我来说真的很新。

如果您使用cURL,则不需要自己进行任何解码。只需使用基本的cURL示例代码,将CURLOPT_ENCODING选项设置为"",如果服务器支持gzip编码,它将自动请求文件并解码。

或者,如果您希望内容在字符串中而不是在文件中:

$ch = curl_init("http://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_ENCODING, "");  // accept any supported encoding
$content = curl_exec($ch);
curl_close($ch);

我已经测试过了,它确实以gzip格式下载内容并自动解码。

(另外,您可能应该包括一些错误处理。)

我不明白你的问题。

你说你下载了这些文件-你不能单方面启用客户端压缩。

OTOH你可以控制它的服务器端-既然你已经标记的问题为PHP,它没有任何意义,你的管理员建议压缩,你没有控制服务器,那么我认为这就是你所说的。

在这种情况下,您只需执行如下操作:

<?php
ob_start("ob_gzhandler");
...your code for generating the XML goes here

…或者也许这与PHP无关,XML文件是静态的——在这种情况下,你需要配置你的web服务器来动态压缩。

除非你的意思是压缩在服务器上是可用的,并且你使用PHP作为客户端通过HTTP获取数据-在这种情况下,服务器只会压缩数据,如果客户端提供一个"Accept-Encoding"请求头包括"gzip"。在这种情况下,您可以使用:

而不是file_get_contents()
function gzip_get_contents($url)
{
     $ch=curl_init($url);
     curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $content=curl_exec($ch);
     curl_close($ch);
     return $content;
}

可能curl可以获得gzip文件

http://www.php.net/curl

尝试使用这个代替file_get_contents

编辑:测试

curl_setopt($c,CURLOPT_ENCODING,'gzip'); 

:

gzdecode($responseContent);

在http请求中发送Accept-Encoding: gzip标头,然后解压缩结果如下所示:http://de2.php.net/gzdecode