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

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

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

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

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

【问题讨论】:

    标签: php 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);
    

    【讨论】:

    • 如果只是添加一个代码示例,为什么不直接编辑依赖的帖子并添加它?
    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2012-03-17
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多