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的主要内容,如果未能解决你的问题,请参考以下文章
无法打开/解压缩 xml.gzip 或 zip.gzip 文件