2011-10-07 50 views
2

我有很多XML-s,我使用file或file_get_content下载,但服务器管理员告诉我,通过GZIP更有效的下载。我的问题是我怎么能包括GZIP,因为我从来没有这样做过,所以这个解决方案对我来说真的是新的。使用GZIP下载文件

回答

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

可能卷曲可以得到一个压缩文件

http://www.php.net/curl

尝试使用它代替的file_get_contents的

编辑:测试

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

则:

gzdecode($responseContent); 
+0

是可以的,根据[文件](http://php.net/manual/en/function.curl-setopt.php)甚至会默认这样做。 (看看'CURLOPT_ENCODING'。) –

+0

是的!它工作得很好 – 2011-10-07 12:44:27

4

你不应该需要做任何如果你使用卷曲解码自己。只需使用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

+0

这对我有效。当然用curl_setopt($ ch,CURLOPT_ENCODING,“gzip”); –