Fatal error: Cannot clone object of class SimpleXMLElement due to zend.ze1_compatibility_mode

Der Kompatibilitätsmodus von Zend soll eigentlich helfen PHP4 Scripte unter PHP5 laufen zu lassen, doch kann er auch PHP5 Scripte in ihrer Funktion beeinträchtigen.

Nachdem ich bei einer älteren vTiger Installation einige PHP5 Funktionen verwenden wollte kam es zu unerwarteten Problemen, unter anderem verursachte der Versuch, ein SimpleXMLObjekt zu erzeugen die Meldung: Fatal error: Cannot clone object of class SimpleXMLElement due to zend.ze1_compatibility_mode.

Eine selbstgeschriebene Fehlerklasse, in der ein Objekt über ein Singleton-Pattern erzeugt wird warf nur bei der Einbindung der Klasse schon fünfzig mal eine Exception, weil versucht wurde das Objekt zu klonen, was ja nicht erwünscht ist.

Um hier Abhilfe zu schaffen, kann man entweder in der php.ini den Kompatibilitätsmodus von Zend ausschalten, was aber zu negativen Effekten in den PHP4 Skripten führen würde.

Die andere Möglichkeit ist, mit der Zeile

php_admin_flag zend.ze1_compatibility_mode Off

in der vhost.conf des Apache den Wert zu ändern. Was aber im Endeffekt die gleichen Probleme mit sich bringt, wenn auf diesem vHost PHP4 Skripte laufen sollen.

Die beste Möglichkeite ist, den Kompatibilitätsmodus von Zend direkt in den betreffenden Skripten auszuschalten. Dies erfolgt einfach direkt im Skript, solange die Funktion ini_set erlaubt ist. Dazu muss man nur in den Kopf des Skripte die Zeile

ini_set (’zend.ze1_compatibility_mode’, 0);

einfügen. Danach laufen die PHP5 Funktionen ohne weitere Probleme.


You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

2 Responses to “Fatal error: Cannot clone object of class SimpleXMLElement due to zend.ze1_compatibility_mode”

  1. Bei mir trat das gleiche Problem auf, allerdings funktionierte ini_set im Skript auch nicht. Ich habe dann
    php_admin_flag zend.ze1_compatibility_mode 0 in der .htaccess hinterlegt, das ging dann problemlos.

    [Reply]

    Christian Reply:

    Hallo,
    habe ein ähnliches Problem, kann aber nich dirket die php config ändern, weil allles bei einem Provider läfut. Habe dann auch den Trick mit der .htaccess Datei veruscht, dann kann ich allerdings nicht mehr auf den Server zugreifen… Fehler 500.
    Wie muss die .htaccess Datei genau aussehen, und wo muss die stehen (im htdocs- oder Skriptverzeichnis)?

    Vielen Dank
    neo

    [Reply]

Leave a Reply


Comments links could be nofollow free.


Amazon Bookshop