Problembeschreibung

Die Komponente SEF Service Map verwendet noch in Ihren Scripten die PHP-Vergleichsfunktion eregi(). Ab PHP Version 5.3 ist diese veraltet (deprecated). Werden durch die Hostingprovider die PHP-Versionen hochgesetzt kommt es dann zu Fehlerausgaben auf der Website. Diese sind zwar zunächst unkritisch, weil es nur Warnausgaben sind, aber sehrwohl stören diese das Seitenlayout, weshalb ein Behebung unumgänglich ist.

Leider wird die Komponente durch den Entwickler diesbezüglich wohl schleppend gepflegt. Deshalb kommt man um ein händischen Fixen nicht herum.



Die Lösung im Detail

Hier beschreibe ich wie es geht. Es ist ganz einfach:

  • plugins/system/sefservicemap.php
  • administrator/components/com_sefservicemap/admin.sefservicemap.php
  • administrator/components/com_sefservicemap/sefservicemap.util.php
  • components/com_sefservicemap/servicemap.html.php

In allen diesen Scripten sind die immer gleichen Dinge zu tun, nämlich das ersetzen des alten Befehls eregi() durch die neue unterstütze Version preg_match(). Zu Erklärung eregi such innerhalb eines Strings nach einem Ausdruck und ignoriert dabei Groß- und Kleinschreibung. Das gleiche bewirkt diese Muster preg_match("/text/i",string). Entsprechen müssen also alle eregi's ersetzt werden. Hier eine Beispielzeile:

Vorher, alte Version:

 

if (eregi('bot',$agent) || eregi('crawler',$agent) || eregi('slurp',$agent) || eregi('ia_archiver',$agent) || eregi('msnbot',$agent) || eregi('live',$agent) || eregi('yahoo',$agent))

 

Nachher, neue Version:

if (preg_match('/bot/i',$agent) || preg_match('/crawler/i',$agent) || preg_match('/slurp/i',$agent) || preg_match('/ia_archive/i',$agent) || preg_match('/msnbot/i',$agent) || preg_match('/live/i',$agent) || preg_match('/yahoo/i',$agent))