PHP を使用して、XML フィード ファイルである外部 URL にアクセスし、結果をデータベースに解析しています。XML ファイルは大きく、約 27 MB です。
データ転送が開始される前にそのファイルを圧縮して、27 MB よりもはるかに小さいファイルを受け取るにはどうすればよいですか? 私の推測では、gzip を使用する必要がありますが、方法がわかりません。
これは、XML ファイルからデータを取得するために使用しているコードです。
$url = "http://www.website.com/feed.xml";
$xmlStr = file_get_contents("$url") or die("can't get file");
$xmlLinq = simplexml_load_string($xmlStr);
編集: ファイルは既にデフォルトの gzip/deflate 圧縮を使用していますが、圧縮されていない圧縮ファイルにアクセスしているようです。
編集: フィードの所有者からこのコードを入手しました。これらは、この問題を解決するための指示であるはずですが、これは C# にあるようです。PHPで同等のものが必要です:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 60000;
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.KeepAlive = false;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9) Gecko/2008052906 Firefox/3.0 (.NET CLR 3.5.30729)";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
if (response.ContentEncoding.ToLower().Contains("gzip"))
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
else if (response.ContentEncoding.ToLower().Contains("deflate"))
responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);