Ergebnis 1 bis 3 von 3

Thema: Deprecated: Function ereg_replace() is deprecated

  1. #1
    Registriert seit
    18.03.2005
    Beiträge
    383

    Standard Deprecated: Function ereg_replace() is deprecated

    Hallo Zusammen

    Erstmals noch im nachhinein ein gutes neues Jahr.

    Nun zu meiner Frage.
    Ich habe auf von PHP 4.1 auf PHP 5.4 geupdatet, nun bekomme ich in meiner Gallery folgender Fehler: Deprecated: Function ereg_replace() is deprecated
    Im Code sieht die Zeile so aus:
    $filename = ereg_replace("^([A-Z])\\\\(.*)", "\\1:\\\\2", $filename);
    $filename = ereg_replace("(.*);([A-Z])\\\\(.*)", "\\2:\\1\\3", $filename);


    was muss ich ersetzen, das die Meldung nicht mehr kommt?

  2. #2
    vstm ist offline Fortgeschrittener Benutzer
    Registriert seit
    28.12.2008
    Ort
    Züri Oberland
    Alter
    35
    Beiträge
    123

    Standard AW: Deprecated: Function ereg_replace() is deprecated

    Salü

    Ich wünsche ebenfalls ein gutes neues Jahr.

    die ereg* Funktionen können durch die preg_* Funktionen der PCRE-Erweterung ersetzt werden. Die Parameter sind ähnlich, es gibt jedoch schon ein paar Unterschiede.

    Der Hauptunterschied ist wohl der, dass der Reguläre Ausdruck ähnlich wie in Perl mit einem Sonderzeichen "umschlossen" werden muss. Also aus "^[a-z]+" wird "/^[a-z]+/" - normalerweise nimmt man dafür Slash ( / ) , es sind aber auch andere Sonderzeichen möglich. Dies gilt nur für den Regulären Ausdruck, nicht jedoch für die "Ersetzen Durch"-Zeichenkette, diese ist mehr oder weniger kompatibel zu den ereg-Funktionen.

    Dieser Code ist kompatibel mit deinem ereg_replace-Code:
    Code:
    $filename = preg_replace("/^([A-Z])\\\\(.*)/", "\\1:\\\\\\2", $filename);
    $filename = preg_replace("/(.*);([A-Z])\\\\(.*)/", "\\2:\\1\\3", $filename);
    Folgendes habe ich angepasst
    • ereg_replace durch preg_replace ersetzt (logisch)
    • Die regulären Ausdrücke (erster Parameter) mit / umschlossen
    • Beim ersten Aufruf musste ich im zweiten Parameter noch ein Zusätzliches Doppel-Backslash-Paar hinzufügen. Ohne diese Änderung wurde "C\\blabla" ersetzt durch "C:\2", was natürlich komplett falsch ist.
      Nun ist es kompatibel mit dem original ereg-Code - beide ersetzen "C\\blabla" durch "C:\\blabla". Ich bin mir aber nicht sicher ob das richtig ist, allenfalls wäre "\\1:\\2" auch richtig, aus "C\\blabla" würde dann "C:\blabla".


    Falls es doch Probleme mit der Kompatibilität gibt bräuchten wir den Input welcher Probleme macht um allenfalls den Regulären Ausdruck anzupassen.

    Schlimmstenfalls kann man die Warnung auch einfach mit der error_reporting-Funktion unterdrücken:

    Code:
    $error_push = error_reporting(0); // Fehler unterdrücken
    $filename = ereg_replace("^([A-Z])\\\\(.*)", "\\1:\\\\2", $filename);
    $filename = ereg_replace("(.*);([A-Z])\\\\(.*)", "\\2:\\1\\3", $filename);
    error_reporting($error_push); // Originalzustand wiederherstellen
    Wenn die Funktion irgendwann komplett aus PHP entfernt wurde, muss der Code aber trotzdem geändert werden.

  3. #3
    Registriert seit
    15.01.2005
    Ort
    Oberbuchsiten
    Beiträge
    909

    Standard AW: Deprecated: Function ereg_replace() is deprecated

    Noch viel besser wäre es, der Gallery ein Update zu spendieren - dann wäre die Kompatibilität zu PHP 5.x perfekt und auch weitere sicherheitsrelevante Fehler behoben ...
    Dieses Posting wurde aus 100% rezyklierten Elektronen hergestellt
    und kann für die Umwelt absolut unschädlich gelöscht werden.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •