PHP打开gzip压缩的XML

Posted

技术标签:

【中文标题】PHP打开gzip压缩的XML【英文标题】:PHP open gzipped XML 【发布时间】:2010-11-14 12:33:48 【问题描述】:

我正在努力阅读 php 中压缩的 xml 文件。

我确实成功地读取了普通的 xml 文件,使用 XMLReader() 像这样:

$xml = new XMLReader();
$xml->open($linkToXmlFile);

但是,当 xml 文件被 gzip 压缩时,这不起作用。如何解压文件并使用 XMLReader 读取?

【问题讨论】:

【参考方案1】:

由于您没有指定 PHP 版本,我假设您使用的是 PHP5。

我想知道为什么人们不建议使用内置的PHP compression streams API。

$linkToXmlFile = "compress.zlib:///path/to/xml/file.gz";
$xml = new XMLReader();
$xml->open($linkToXmlFile);

据我了解,在幕后,它会透明地为您解压缩文件,并允许您像阅读普通 xml 文件一样阅读它。现在,这可能是一种严重的轻描淡写。

【讨论】:

确实是我要找的这种东西……我今晚试试…… @Fortega,这就是我来这里的目的。 很棒的方法,不知道它存在!也许现在有“更好”的解决方案,但它有效,这就是我需要的:) 有谁知道流式传输未压缩的文档比传输压缩的文档更快吗?【参考方案2】:

也许函数gzdecode 可以帮助你:手册说(引用):

解码一个 gzip 压缩字符串

所以,你必须:

下载 XML 数据 以字符串形式获取 用gzdecode解压 与XMLReader一起工作

这将取决于您的服务器上安装了正确的扩展zlib 我猜)...

Mark: 扩展 Pascal 的帖子,这里有一些示例代码应该适合你

$xmlfile = fopen($linkToXmlFile,'rb');
$compressedXml = fread($xmlfile, filesize($linkToXmlFile));
fclose($xmlfile);
$uncompressedXml = gzdecode($compressedXml); 

$xml = new XMLReader();
$xml->xml($uncompressedXml);

【讨论】:

在我到达这里之前,我刚刚尝试过这个东西。这不起作用,因为出于某种原因,gzdecode(和 gzread)剥离了所有 XML 标记并仅返回值。【参考方案3】:

扩展 Pascal 的帖子,这里有一些适合你的示例代码

$xmlfile = fopen($linkToXmlFile,'rb');
$compressedXml = fread($xmlfile, filesize($linkToXmlFile));
fclose($xmlfile);
$uncompressedXml = gzdecode($compressedXml); 

$xml = new XMLReader();
$xml->xml($uncompressedXml);

【讨论】:

如果只是添加一个代码示例,为什么不直接编辑依赖的帖子并添加它?

以上是关于PHP打开gzip压缩的XML的主要内容,如果未能解决你的问题,请参考以下文章

GZIP压缩教程_SEO必学提升网站打开速度

无法打开/解压缩 xml.gzip 或 zip.gzip 文件

atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php

使用 IIS 禁用单个 php 文件的 Gzip 压缩

php curl采集,服务器gzip压缩返回数据怎么办

php curl采集,服务器gzip压缩返回数据怎么办