我有很多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