Problembeschreibung

Mit Umstellung von Webservern von der PHP-Version 5.2.x auf 5.3.x gelten einige Befehle als veraltet (deprecated). Wurden Komponenten von den Herstellen diesbezüglich nicht weitergepflegt wird es bei dem einen oder anderen Projekt zunächst zu Warnmeldungen kommen und später zur Funktionsverweigerung.

Wenn es nur Warnungen sind, kann man das Problem vorübergehend unterbinden, wenn man die Ausgabe von Warnungen für den Webserver abstellt (display_errors = off). Damit ist das Problem aber nur in die Zukunft verschoben, aber man gewinnt Zeit um die Projektumstellung in Ruhe zu realisieren - entweder in dem Komponenten selbst angepasst werden oder indem man das Joomla auf z.B. 2.5.x migriert inkl. der neuen Komponenten.

Eine diese Komponenten ist z.B. sh404SEF für Joomla 1.5.x. Hier wird z.B. häufig der veraltete Befehle eregi() zum String-Ersetzen verwendet, was durch die jetzt gültige funktion preg_match() ersetzt werden muss.

 



 

Hier die Umsetzung im Detail - inkl. der betroffenen Scripte

Das erste betroffene Script ist administrator/components/com_sh404sef/sh404sef.class.php. Ca. Zeile 3039 und 3040 muss folgende Ersetzung erfolgen:

alt:

  && !eregi('^(([^:/?#]+):)', $newstring)
  && !eregi('this\.options\[selectedIndex\]\.value', $newstring);

neu:

  && !preg_match('/^(([^:\/\?#]+):)/i', $newstring)
  && !preg_match('/this\.options\[selectedIndex\]\.value/i', $newstring);

Das Script components/com_sh404sef/sef_ext/com_content.php ca. Zeile 40:

alt:

if (eregi('Itemid=[0-9]+', $string) === false) { // if no Itemid in non-sef URL

neu:

if (preg_match('/Itemid=[0-9]+/i', $string) === false) { // if no Itemid in non-sef URL

Ggf. könnten weitere SEF-Extensions für installierte Komponenten betroffen sein, die nach dem gleichen Prinzip wie an den o.g. Bsp. zu sehen angepasst werden müssen. Das Prinzip noch mal als Zusammenfassung:

  1. "egegi" ersetzen durch "preg_match"
  2. den Suchstring in "/" einfassen, vorn und hinten gefolgt von einem "i" (Groß-/Kleinschreibung ignorieren)
  3. ggf. bestimmte Zeichen im Suchstring escapen durch Voranstellen eines "\"