まず、 を使用することをお勧めしますcURL
。XML がどれほど巨大であっても、メモリに関する問題は少なくなります。
$fp = fopen('/var/www/vhosts/my.com/xml/feed.xml', 'w'); // opening file handler to write feed in
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://domain.com/xml/page.xml'); // setting URL to take XML from
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // If result is gziped
curl_setopt($ch, CURLOPT_SSLVERSION, 3); // OpenSSL issue
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Wildcard certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // disabling buffer output, bec. we want to write XML to the file first and don't need it to be returned into variable
curl_setopt($ch, CURLOPT_FILE, $fp); // here we should transfer opened file handler to the cURL and it should be writable!
$result = curl_exec($ch); // executing download
$reponse_code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); // retrieving HTTP return code for our request. Was it successful or not.
したがって、SSL の背後にあり、GZIP されている場合でも、XML フィードをファイルに直接ダウンロード/保存できます。
you を使用curl_getinfo()
すると、リクエストに関するさまざまな情報を取得できます。手順が自動化されている場合は、リクエストが失敗した場合にどうするかを決めるとよいでしょう。
それよりも、ファイルが大きくない場合 ( 200 ~ 300 Mb を超える非常に大きなファイルを意味SimpleXML
します)、ライブラリ( PHP5 以降でのみ使用可能) を使用してデータを解析できます。PHP4 を使用している場合 (現在でも可能ですlibXML
)、非常に役立つものを見つけてみてください。
取得したファイルがかなり大きい場合:)FILE
パーミッションを持つ MySQL データベースはあなたの味方です。