Hallo Jörg,
while ( ($buffer = fgets($handle)) !== false ) {
Arbeite nicht Zeilenweise, sondern mit Chunks. Ein XML-Dokument vollständig in einer Zeile ist mindestens well-formed (die DTD muss auf einer eigenen Zeile stehen) und keine Seltenheit bei maschinell erstellten Dokumenten. In dem Fall würdest du wieder das ganze Dokument in einem Rutsch lesen.
LG,
CK