2011-08-07 26 views
4

simplexml_load_file()PHP関数を使用してgzip形式のXMLファイルをロードしようとしていますが、データをデコードする方法がわかりません。simplexml_load_file()を使用してgzip形式のXMLファイルをロードする

+0

http://www.php.net/manual/en/function.gzdecode.phpまたは –

+0

@Marek Sebera - この関数(gzdecode)はマニュアルにありますが、PHPでは存在しません。 –

+0

@Pawel:PHPの一部ですが、拡張機能を有効にする必要があります。http://www.php.net/manual/en/zlib.installation.phpを参照してください。これは非常に一般的な拡張です。 – hakre

答えて

3

は、それがsimplexml_load_string()を使用してXMLとしてgzuncompress() と負荷の文字列を使用してfile_get_contents() 解凍を使用して文字列にそれを読んでください。

+0

Readgzfile()は直接ブラウザに送信しますが、文字列は返しません。 – SnackerSWE

+0

申し訳ありませんが修正されました。 –

+3

うーん、なぜ単純な 'simplexml_load_file(" compress.zlib://test.xml ");' [代わりに](http://stackoverflow.com/questions/6973672/load-gzipped-xml-file-with-simplexml -load-file/6973867#6973867)? – hakre

4
/*EDIT print_r(gzdecoder(simplexml_load_file('test.xml'))); 
(Not sure without testing that the internals of what loads the xml 
    in *_load_file would see the gzipped content as invalid) 
*/ 

    $xml=simplexml_load_string(gzdecoder(file_get_contents('test.xml'))); 
    print_r($xml); 

function gzdecoder($d){ 
    $f=ord(substr($d,3,1)); 
    $h=10;$e=0; 
    if($f&4){ 
     $e=unpack('v',substr($d,10,2)); 
     $e=$e[1];$h+=2+$e; 
    } 
    if($f&8){ 
     $h=strpos($d,chr(0),$h)+1; 
    } 
    if($f&16){ 
     $h=strpos($d,chr(0),$h)+1; 
    } 
    if($f&2){ 
     $h+=2; 
    } 
    $u = gzinflate(substr($d,$h)); 
    if($u===FALSE){ 
     $u=$d; 
    } 
    return $u; 
} 
+0

@SnackerSWE私の答えを試しましたか... –

11

PHPはsupport for zlib compressionビルドであり、ちょうどcompress.zlib://とgzipで圧縮されたデータを使用して、ファイルのパスを接頭辞とすれば完了です:魔法のように

$xml = simplexml_load_file("compress.zlib://test.xml"); 

作品。

+0

X-Ref:[関連する質問とPHPのバグレポート](http://stackoverflow.com/a/14978162/367456) – hakre

関連する問題