0

curl を使用して xml.gz ファイルからデータを取得しようとしています。ファイルをダウンロードすることはできますが、どの試行でも使用可能な XML を取得できません。XML を印刷しようとすると、次のような文字化けした特殊文字の長いリストが表示されます。

‹ì½ûrâÈ–7ú?E~{Çž¨Ši°î—Ù5=ÁÍ6]`Ø€ë²ãDLÈ u

このxmlを解凍してエンコードする簡単な方法はありますか? おそらくSimpleXMLを介して?ファイルは大きく、認証が必要です。これが私の現在のコードです:

$username='username';
$password='password';
$location='http://www.example.com/file.xml.gz';


$ch = curl_init ();
curl_setopt($ch,CURLOPT_URL,$location);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_USERPWD,"$username:$password");
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HEADER, 0);

$xmlcontent = curl_exec ($ch); 
curl_close($ch);

print_r($xmlcontent);

ご協力いただきありがとうございます!

4

4 に答える 4

0

まず、ファイルをディスクに保存する必要があります。gz 圧縮されているため、(圧縮されていない) XML にアクセスする前に圧縮を解除する必要があります。これは、PHPのzlib:// -- bzip2:// -- zip:// — 圧縮ストリームで実行できます。

$file = 'compress.zlib://file.xml.gz';
         ################
$xml  = simplexml_load_file($file);

これを機能させるには、ZLib 拡張機能をインストール/構成する必要があります。

ラッパーとは、最初にそのファイルの圧縮されていないバリアントを作成するのではなく(2番目のファイルを作成することも解決策になる)、ラッパーはそのファイルのデータをオンザフライで透過的に解凍することを意味します。圧縮されていない XML (そのライブラリが必要としているのは、圧縮されていない XML です)。

同様に参照してください:

于 2013-07-07T07:14:29.260 に答える
0

取得した結果を解凍することをお勧めします。

//[...]
$xmlcontent = gzdecode ( curl_exec($ch) ); 
curl_close($ch);
print_r($xmlcontent);

明らかに、追加のエラー チェックを行う必要があります。これは、短縮された一般的なアプローチにすぎません。

php によって提供される 2 つの同様の関数があることに注意してください。

ファイルが実際に http サーバーによって配信された物理的な gzip 圧縮ファイルである場合は、おそらく 2 番目のものを使用する必要があります。

于 2013-07-07T06:39:09.663 に答える