Versucht man, eine alte Joomla!-Version (1.0.x) unter neueren PHP-Versionen zu installieren, beispielsweise von anderen Servern oder alten Seiten von Kunden, so stellt sich dies als gar nicht so einfach dar. Erst einmal bekommen man viele DEPRECATED-Fehlermeldungen. Diese beziehen sich nahezu ausschließlich auf Klassen-Aufrufe durch Referenzen und die Verwendung von ereg_replace
, ereg
, etc.
Durch die Ersetzung von ereg_replace()
durch preg_replace()
und ereg()
durch preg_match()
in allen fehlerhaften Dateien, behebt man dieses erste Problem. Hierbei bitte darauf achten, dass die preg_-Funktionen DELIMITERS benötigen – also einfach die Pattern durch Raute-Zeichen (#) oder auch Slashes (/) einschließen.
Die Klassenaufrufe durch Referenzen kann man aktualisieren indem man einfach alls &= durch einfach = ersetzt. PHP macht diesen Krimskrams in PHP5 nämlich ganz von allein.
Übrig bleibt noch eine letzte Fehlermeldung, die leider dazu führt, dass kein Content im Inhaltsbereich angezeigt wird:
1 2 |
Warning: Parameter 1 to HTML_content::show() expected to be a reference, value given in .../includes/Cache/Lite/Function.php on line 92 |
Entgegen der Meinung, dass man hierbei nichts machen kann und einfach auf PHP5 upgraden soll, gibt es natürlich ein Workaround – denn nicht alle Provider erlauben ein Downgrade, insbesondere nicht für ausgewählte Virtuelle Hosts.
Zur Bug-Behebung in die Datei /includes/Cache/Lite/Function.php
gehen und dort die gesamte Funktion call()
durch die folgende ersetzen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
<?php /** * Calls a cacheable function or method (or not if there is already a cache for it) * * Arguments of this method are read with func_get_args. So it doesn't appear * in the function definition. Synopsis : * call('functionName', $arg1, $arg2, ...) * (arg1, arg2... are arguments of 'functionName') * * @return mixed result of the function/method * @access public */ function call() { // Following 4 Lines Added For PHP5.3 Support $arguments = func_get_args(); $numargs = func_num_args(); for($i=1; $i < $numargs; $i++) $arguments[$i] = &$arguments[$i]; $id = serialize($arguments); // Generate a cache id if (!$this->_fileNameProtection) { $id = md5($id); // if fileNameProtection is set to false, then the id has to be hashed // because it's a very bad file name in most cases } $data = $this->get($id, $this->_defaultGroup); if ($data !== false) { $array = unserialize($data); $output = $array['output']; $result = $array['result']; } else { ob_start(); ob_implicit_flush(false); $target = array_shift($arguments); if (strstr($target, '::')) { // classname::staticMethod list($class, $method) = explode('::', $target); $result = call_user_func_array(array($class, $method), $arguments); } else if (strstr($target, '->')) { // object->method // use a stupid name ($objet_123456789 because) of problems when the object // name is the same as this var name list($object_123456789, $method) = explode('->', $target); global $$object_123456789; $result = call_user_func_array(array($$object_123456789, $method), $arguments); } else { // function $result = call_user_func_array($target, $arguments); } $output = ob_get_contents(); ob_end_clean(); $array['output'] = $output; $array['result'] = $result; $this->save(serialize($array), $id, $this->_defaultGroup); } echo($output); return $result; } ?> |
Google+
Schreibe einen Kommentar