While importing a rather large XML-document (45MB+) into a database today, I ran into a weird problem on one specific server. The server runs SUSE Enterprise and presented an error that neither other test server gave. After a bit of digging around on the web I were able to collect enough information from several different threads about what could be the source of the problem.
It seems that the limit was introduced in libxml2 about half a year ago to avoid some other memory problems, but this apparently borked quite a few legitimate uses. As I have very little experience with administrating SUSE Enterprise based servers, I quickly shrugged off trying to update the packages and possibly recompiling PHP. Luckily one of the comments in a thread about the problem saved the day.
If you find yourself running into this message; swap your named entities in the XML file (such as < and >) to numeric entities (such as < and >). This way libxml2 just replaces everything with the byte value while parsing instead of trying to be smart and keep an updated cache.
3 thoughts on “parser error : Detected an entity reference loop”
Thanks a lot for the tip – I just ran into the same issue with libxml2 on OSX.
Thanks a lot! i had the same problem from php on debian etch, but the numeric entities tip did the trick!
Here I am in 2016 and this was exactly what I needed to fix my problem. Was trying to parse a 33mb ONIX file and got this weird error. I was creating my ONIX file from a larger (780mb) file so I had to use `http://stackoverflow.com/a/11179875/484780` to manually convert the entities.