【发布时间】:2011-10-07 12:24:57
【问题描述】:
我有很多 XML-s,我使用 file 或 file_get_content 下载,但服务器管理员告诉我,通过 GZIP 下载效率更高。我的问题是如何包含 GZIP,因为我以前从未这样做过,所以这个解决方案对我来说真的很新。
【问题讨论】:
我有很多 XML-s,我使用 file 或 file_get_content 下载,但服务器管理员告诉我,通过 GZIP 下载效率更高。我的问题是如何包含 GZIP,因为我以前从未这样做过,所以这个解决方案对我来说真的很新。
【问题讨论】:
如果您使用 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。)
【讨论】:
我不明白你的问题。
你说你下载了这些文件——你不能单方面启用压缩客户端。
OTOH,您可以在服务器端控制它 - 并且由于您已将问题标记为 PHP,因此您的管理员建议在您没有压缩的地方进行压缩没有任何意义控制服务器然后我认为这就是你在说的。
在这种情况下,您只需执行以下操作:
<?php
ob_start("ob_gzhandler");
...your code for generating the XML goes here
...或者这可能与 PHP 无关,并且 XML 文件是静态的 - 在这种情况下,您需要配置您的网络服务器以动态压缩。
除非您的意思是在服务器上可以进行压缩,并且您使用 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;
}
【讨论】:
大概curl可以得到一个gzip压缩文件
尝试使用它而不是 file_get_contents
编辑:测试
curl_setopt($c,CURLOPT_ENCODING,'gzip');
然后:
gzdecode($responseContent);
【讨论】:
CURLOPT_ENCODING。)
在您的 http 请求中发送 Accept-Encoding: gzip 标头,然后解压缩结果,如下所示:
http://de2.php.net/gzdecode
【讨论】: