eregi is deprecated

Begonnen von Webfan, 19 Mai 2010, 09:40:58

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Webfan

Hallo,
wie der Titel schon sagt geht es um die Funktion eregi die es demnächst nicht mehr gibt.
Ich habe das schon an anderer Stelle gefragt, habe aber keine Antwort erhalten:
Ist

preg_match('/'.$search.'/', $string_, $found)

die korrekte "Übersetzung" für

eregi($search, $string_)

???

Ich habe gedacht man könnte statt alle Dateien durchzugehen und die eregis zu ersetzen (davon habe ich ziemlich viele im Einsatz) die Funktion einfach deklarieren:


if(!function_exists('eregi'))
{
   function eregi($search, $string_)
    {
    if(preg_match('/'.$search.'/', $string_, $found) )
           {
           return TRUE;
           }else{
                 return FALSE;
                }
   
    }

}

Meine Frage: Ist die Funktion so korrekt, gibt es eine bessere/richtigere Lösung?


siggi

#1
wie soll das gehen ?

if(!function_exists('eregi')) wird nie erfüllt, weil diese Funktion lediglich als 'predecated' deklariert ist und zum Befehlsumfang gehört. Bis zur PHP-Version 6 wird diese auch nicht deaktiviert. Entweder du umschreibst jede Funktion oder unterdrückst die Warnung durch Schreiben von @eregi(...
Wenn man an Gras zieht wächst es auch nicht schneller.

Webfan

Achso, das war mir nicht klar. Die Funktion gehört zum Funktionsumfang ist aber deprecated, *grumpf*.

ZitatEntweder du umschreibst jede Funktion oder unterdrückst die Warnung durch Schreiben von @eregi
Aber soll das heißen das die Funktion trotz der Warnung "funktioniert"?
Von einem Unterdrücken der Meldung habe ich ja nichts, wenn das Ergebnis nicht stimmt.

ZitatBis zur PHP-Version 6 wird diese auch nicht deaktiviert.
Heißt das ab php 6 macht meine Idee vom deklarieren doch Sinn?
Denn darum gehts mir ja, in meiner jetzigen php Version funktioniert eregi, ich möchte nur schonmal für die Zukunft bauen...

Aber ich habe immer noch keine Antwort auf meine Frage: Wie ersetze ich nun eregi korrekt mit preg_match, ist
preg_match('/'.$search.'/', $string_, $found)  richtig und ausreichend?

siggi

#3
ZitatHeißt das ab php 6 macht meine Idee vom deklarieren doch Sinn?
Sicher. Bis dahin sollten alle PCRE-basierenden Funktionen entfernt bzw. umschrieben sein. Darum gibt es ja jetzt schon die deprecated-Warnung.

Zitataber soll das heißen das die Funktion trotz der Warnung "funktioniert"?
Ja. zumindest in den Versionen =< 5.3

Zitatist preg_match('/'.$search.'/', $string_, $found)  richtig und ausreichend?

jein, du kannst die ereg() Funktion nur bedingt 1:1 durch preg_match() ersetzen, da die PCRE-Muster (preg_*Funktionen) Trennzeichen haben, aber die ereg Muster nicht.

Zitat von: http://php.net/manual/de/function.ereg-replace.php
Hinweis: Seit PHP 5.3.0 ist die regex-Erweiterung zugunsten der PCRE-Erweiterung als veraltete markiert. Ein Aufruf dieser Funktion wird eine E_DEPRECATED-Notice ausgeben. Sie können sich die Liste der Unterschiede ansehen, wenn Sie Hilfe beim Umstieg auf PCRE benötigen.

Also beim Umschreiben darauf achten :)
Wenn man an Gras zieht wächst es auch nicht schneller.

Webfan

Zitatjein, du kannst die ereg() Funktion nur bedingt 1:1 durch preg_match() ersetzen, da die PCRE-Muster (preg_*Funktionen) Trennzeichen haben, aber die ereg Muster nicht.
Check ich jetzt nicht ganz auf Anhieb, werd mich wohl oder übel durch die ganzen preg_match Parameter durcharbeiten müssen.

Aber vielen Dank schonmal für Deine Antwort!  :)