Los errores de simplexml_load_string en archivos grandes ocurren en un sistema pero no en otro

Estoy tratando con una biblioteca de PHP de terceros que no puedo editar, y ha estado funcionando bien durante casi un año. Usasimplexml_load_string en la respuesta de un servidor remoto. Últimamente se ha estado ahogando en grandes respuestas. Esta es una fuente de datos para listados de bienes raíces, y el formato es similar al siguiente:

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

Descargué un archivo de muestra de una respuesta (aproximadamente 22 MB), aquí es donde terminé con mi depuración y cordura. Ambos servidores ejecutan la versión 5.3.8 de PHP, pero tenga en cuenta los diferentes resultados. Estoy seguro de que ambos archivos son iguales (supongo que los diferentes tamaños de archivo, strlen y los últimos 50 caracteres pueden explicarse por las nuevas líneas de Windows que tienen un carácter de retorno de carro adicional). Guión de prueba:

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

Salida localmente en 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>"

Salida en servidor remoto 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>"

Algunas respuestas a comentarios e información adicional:

El XML en sí mismo parece ser válido por lo que puedo decir (yhace trabajar en mi sistema).

magic_quotes_runtime está definitivamente apagado

El servidor de trabajo tiene libxml Versión 2.7.7, mientras que el otro tiene 2.7.6. ¿Podría eso realmente hacer la diferencia? No pude encontrar un registro de cambios de libxml pero parece poco probable.

Esto parece ocurrir solo cuando la respuesta / el archivo tiene un tamaño determinado, y el error siempre ocurre en la línea siguiente a la última.

No estoy teniendo problemas de memoria, el script de prueba se ejecuta instantáneamente.

Hay diferencias en las configuraciones de PHP que puedo publicar si supiera cuáles son relevantes. ¿Alguna idea de cuál podría ser el problema, o sabe algo más que quiera verificar?

Respuestas a la pregunta(3)

Su respuesta a la pregunta