Der Kompatibilitätsmodus von Zend hilft vielleicht PHP4 Scripte unter PHP5 laufen zu lassen, doch kann er auch PHP5 Scripte so beeinflussen, dass das Script nicht mehr laufen kann...
Problem
Ein Script von mir, welches per simplexml_load_file eine XML Datei lädt funktionierte plötzlich nicht mehr. Ich bin der Sache auf den Grund gegangen indem ich erstmal das error_reporting auf E_ALL gestellt habe. Das zeigt nähmlich alle Ausgaben von PHP an, was man im Produktivbetrieb mit einer 0 wieder deaktiveren sollte.
Nachdem ich das Script wieder aufgerufen hatte, bekam ich folgende Fehlermeldung: Fatal error: Cannot clone object of class SimpleXMLElement due to 'zend.ze1_compatibility_mode'. Der Code der das verursachte könnte ich in Listing 1 sehen.
Lösung
Die erste Möglichkeit ist, in der php.ini den Kompatibilitätsmodus von Zend wieder auszuschalten. Das wäre aber die Holzhammermethode, da noch die meisten Scripte für PHP4 sind und den Zend-Kompatibilitätsmodus brauchen.
Die andere Möglichkeit ist, über den vhost.conf Eintrag des Apache den Wert zu ändern. Das kann man mit einem:
php_admin_flag zend.ze1_compatibility_mode Off
erreichen. Danach ein Neustrat des Apache und alles sollte wieder funktionieren
Die dritte Möglichkeite wäre, gezielter den Kompatibilitätsmodus von Zend auszuschalten. Das kann man einfach direkt im Script machen, solange die Funktion ini_set erlaubt ist. Also folgendes einfügen
ini_set ('zend.ze1_compatibility_mode', 0);
und der Zend-Kompatibilitätsmodus ist ausgeschaltet.
Listing 1
Download Code!
// ...Viel PHP Code
// $xmlTarget enthält den Pfad zu XML Datei.
$xmlObject = simplexml_load_file($xmlTarget);