输出gzip结果作为流

时间:2017-07-24 02:05:38

标签: php gzip

我有一个简单的PHP脚本,可以从URL列表中输出站点地图。

站点地图是动态生成的,到目前为止我可以直接输出XML并且它可以工作,但我认为压缩XML更好。

header ('Content-Type: application/xml');

echo '<?xml version="1.0" encoding="UTF-8"?>', "\n";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">', "\n";

$handle = gzopen($file, 'r');
while (!gzeof($handle))
{
    $buffer = trim(gzgets($handle, 4096));
    echo "\t", '<url><changefreq>weekly</changefreq><priority>0.5</priority><loc><![CDATA[http://', $_SERVER['HTTP_X_HOST'], '/', $buffer, ']]></loc></url>', "\n";
}
gzclose($handle);

echo '</urlset>';

要动态生成sitemap-1.xml.gz我可以在内存中填充XML然后gzip并输出结果,但这会花费很多服务器内存,例如

echo gzcompress(create_sitemap());

更好的解决方案是逐块编写gzip输出,作为流。

甚至可能吗?

0 个答案:

没有答案
相关问题