編集できないサードパーティの PHP ライブラリを扱っていますが、ほぼ 1 年間正常に動作しています。simplexml_load_string
リモートサーバーからの応答で使用します。最近、大きな反応で窒息しています。これは不動産リストのデータ フィードで、形式は次のようになります。
<?xml version="1.0"?>
<RETS ReplyCode="0" ReplyText="Operation Successful Reference ID: 9bac803e-b507-49b7-ac7c-d8e8e3f3aa89">
<COUNT Records="9506" />
<DELIMITER value="09" />
<COLUMNS> sysid 1 2 3 4 5 6 </COLUMNS>
<DATA> 252370080 Residential 0.160 No ADDR0 06051</DATA>
<DATA> 252370081 Residential 0.440 Yes ADDR0 06043</DATA>
<DATA> 252370082 Residential 1.010 No ADDR0 06023</DATA>
<DATA>More tab delimited text</DATA>
<!-- snip 9000+ lines -->
</RETS>
応答のサンプル ファイル (約 22 MB) をダウンロードしました。どちらのサーバーも PHP バージョン 5.3.8 を実行していますが、結果が異なることに注意してください。私は、両方のファイルが同じであることを確信しています (異なるファイルサイズ、strlen、および最後の 50 文字は、追加のキャリッジ リターン文字を持つ Windows の改行によって説明できると思います)。テスト スクリプト:
error_reporting(-1);
ini_set('display_errors', 1);
$file = 'error-example.xml';
$xml = file_get_contents($file);
echo 'filesize: ';
var_dump(filesize($file));
echo 'strlen: ';
var_dump(strlen($xml));
echo 'simplexml object? ';
var_dump(is_object(simplexml_load_string($xml)));
echo 'Last 50 characters: ';
var_dump(substr($xml, -50));
Windows でローカルに出力:
filesize: int(21893604)
strlen: int(21893604)
simplexml object? bool(true)
Last 50 characters: string(50) "RD DR CT Watertown 203-555-5555 </DATA>
</RETS>"
リモート UNIX サーバーでの出力:
filesize: int(21884093)
strlen: int(21884093)
simplexml object?
Warning: simplexml_load_string(): Entity: line 9511: parser error : internal error in /path/to/test.php on line 19
Warning: simplexml_load_string(): AULTED CEILING IN FOYER, BRICK FP IN FR, NEW FLOORING IN LR DR FR FOYER KITCHEN in /path/to/test.php on line 19
Warning: simplexml_load_string(): ^ in /path/to/test.php on line 19
Warning: simplexml_load_string(): Entity: line 9511: parser error : Extra content at the end of the document in /path/to/test.php on line 19
Warning: simplexml_load_string(): AULTED CEILING IN FOYER, BRICK FP IN FR, NEW FLOORING IN LR DR FR FOYER KITCHEN in /path/to/test.php on line 19
Warning: simplexml_load_string(): ^ in /path/to/test.php on line 19
bool(false)
Last 50 characters: string(50) "ORD DR CT Watertown 203-555-5555 </DATA>
</RETS>"
コメントと追加情報への返信:
私が知る限り、XML 自体は有効であるように見えます (私のシステムでは動作します)。
magic_quotes_runtime
は間違いなくオフです。動作中のサーバーには libxml バージョン 2.7.7 があり、もう一方のサーバーには 2.7.6 があります。それは本当に違いを生むことができますか?libxml の変更ログは見つかりませんでしたが、可能性は低いようです。
これは、応答/ファイルが特定のサイズを超えている場合にのみ発生するようで、エラーは常に最後から 2 番目の行で発生します。
メモリの問題は発生していません。テスト スクリプトはすぐに実行されます。
どの構成が関連しているかがわかっている場合は、投稿できる PHP 構成に違いがあります。問題が何であるか、または他に確認したいことを知っていますか?