我有很多XML-s,我使用file或file_get_content下载,但服务器管理员告诉我,通过GZIP下载更有效率。我的问题是如何包含GZIP,因为我之前从未这样做过,所以这个解决方案对我来说真的很新。
答案 0 :(得分:4)
如果使用cURL,则不需要自己进行任何解码。只需使用basic cURL example code,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格式下载内容并自动解码。
(另外,您可能应该包含一些error handling。)
答案 1 :(得分:3)
可能curl可以获取一个gzip压缩文件
尝试使用此而不是file_get_contents
编辑:测试
curl_setopt($c,CURLOPT_ENCODING,'gzip');
然后:
gzdecode($responseContent);
答案 2 :(得分:3)
我不明白你的问题。
您说您下载了这些文件 - 您不能单方面启用压缩客户端。
OTOH你可以控制它在服务器端 - 并且因为你已经将问题标记为PHP,并且管理员建议在没有你的地方推荐压缩没有任何意义控制服务器然后我认为这就是你在说什么。
在这种情况下,您只需执行以下操作:
<?php
ob_start("ob_gzhandler");
...your code for generating the XML goes here
...或者这可能与PHP无关,而且XML文件是静态的 - 在这种情况下,您需要配置您的Web服务器以便即时压缩。
除非您的意思是服务器上的压缩可用并且您使用PHP作为客户端通过HTTP获取数据 - 在这种情况下,如果客户端提供“Accept-Encoding”请求标头,服务器将仅压缩数据,包括“压缩程序”。在这种情况下,您可以使用:
而不是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;
}
答案 3 :(得分:2)
在您的http请求中发送Accept-Encoding: gzip
标头,然后解压缩结果,如下所示:
http://de2.php.net/gzdecode