Błędy simplexml_load_string w dużych plikach występują w jednym systemie, ale nie w innym

Mam do czynienia z biblioteką PHP innej firmy, której nie mogę edytować, i działa dobrze przez prawie rok. To używasimplexml_load_string na odpowiedź ze zdalnego serwera. Ostatnio zadławił się dużymi odpowiedziami. Jest to kanał danych dla aukcji nieruchomości, a format wygląda mniej więcej tak:

<?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>

Pobrałem przykładowy plik odpowiedzi (około 22 MB), gdzie skończyło się na moim debugowaniu i poprawności. Oba serwery działają w wersji PHP 5.3.8, ale zwróć uwagę na różne wyniki. Jestem pewien, że oba pliki są takie same (przypuszczam, że różne rozmiary plików, strlen i ostatnie 50 znaków można wytłumaczyć znakami nowej linii systemu Windows z dodatkowym znakiem powrotu karetki). Skrypt testowy:

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));

Wyjście lokalnie w systemie 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>"

Dane wyjściowe na zdalnym serwerze 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>"

Niektóre odpowiedzi na komentarze i dodatkowe informacje:

Sam XML wydaje się być ważny tak daleko, jak mogę to powiedzieć (i torobi pracować na moim systemie).

magic_quotes_runtime jest zdecydowanie wyłączony.

Działający serwer ma wersję 2.7.7 libxml, a drugi 2.7.6. Czy to może naprawdę zmienić? Nie mogłem znaleźć dziennika zmian libxml, ale wydaje się to mało prawdopodobne.

Wydaje się, że zdarza się to tylko wtedy, gdy odpowiedź / plik przekracza pewien rozmiar, a błąd występuje zawsze w ostatniej linii.

Nie mam problemów z pamięcią, skrypt testowy działa natychmiast.

Istnieją różnice w konfiguracjach PHP, które mogę opublikować, jeśli wiedziałem, które z nich są istotne. Jakiś pomysł, jaki może być problem, lub wiedzieć o czymś innym, co chciałbym sprawdzić?

questionAnswers(3)

yourAnswerToTheQuestion