Christoph Schnauß: preg_replace() verblüfft mich

hallo Forum,

ich habe an einem Script gebastelt, das erstmal mit Windows, Apache 2.0.54 und PHP 5.0.4 problemlos lief. Jetzt habe ich es auch mit FreeBSD, Apache 2.0.54 und PHP 5.0.4 aufgerufen, und plötzlich beschwert es sich über "Call to undefined function preg_replace()". Der Hintergrund ist: das Script liest eine URL ein, das Suchmuster paßt auf alle HTML-Kommentare, und die sollen gestrichen werden, das Muster zum Ersetzen ist also einfach "". Da das Teil mit Windows erstmal funktionierte, hab ich nicht weiter ins Handbuch geschaut.
Jetzt wurde ein kurzes Nachsehen doch nötig. Siehe da, das Handbuch sagt mir: "Stellen Sie sicher, dass Ersatz gültigen PHP-Code erzeugt, weil sich PHP sonst über einen Syntaxfehler (parse error) in der Zeile beschwert, die den Aufruf von preg_replace() enthält." Aha. Da mein "Ersatz" gar nichts enthält, ist das offenbar auch kein gültiger Code. Oder interpretiere ich da was verkehrt? Schließlich wird mir ja was von "undefined function" erzählt und nix von "parse error". Ich gestehe, daß mich das etwas konfus macht.

Sowohl unter Windows wie auch unter FreeBSD fahre ich PHP in der "Modul-Variante". Wieso mag mein preg_replace() dann unter FreeBSD nicht funktionieren? Anderes, was das Script (oder andere Scripts) tun soll, macht es ja auch. Wenn ich die Funktion, die das preg_replace() enthält, mal ganz auskommentiere, tut das Script alles, was es tun soll.

Grüße aus Berlin

Christoph S.

  1. hi,

    Jetzt habe ich es auch mit FreeBSD, Apache 2.0.54 und PHP 5.0.4 aufgerufen, und plötzlich beschwert es sich über "Call to undefined function preg_replace()".

    dann ist die PCRE-erweiterung wohl dort einfach nicht installiert ...?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hallo,

      dann ist die PCRE-erweiterung wohl dort einfach nicht installiert ...?

      Doch, ist sie. Aber es ist richtig, dafür gibts einen eigenen port, wenn ich "nur" mod_php installiert hätte, wäre PCRE tatsächlich nicht vorhanden. In meinem schon etwas älteren nstallationsprotokoll steht:"The following line has been added to your /usr/local/etc/php/extensions.ini
      configuration file to automatically load the installed extension:
      extension=pcre.so". Außerdem gibt mir phpinfo() bekannt, daß die PCRE "enabled" seien: "PCRE Library Version   4.5 01-December-2003".

      Grüße aus Berlin

      Christoph S.

  2. Hallo Christoph,

    ich habe an einem Script gebastelt, das erstmal mit Windows, Apache 2.0.54 und PHP 5.0.4 problemlos lief. Jetzt habe ich es auch mit FreeBSD, Apache 2.0.54 und PHP 5.0.4 aufgerufen, und plötzlich beschwert es sich über "Call to undefined function preg_replace()".

    In so einem Fall solltest einfach mal nachschauen ob für die Funktionsgruppe zu der die vermisste Funktion gehört irgendwelche Anforderungen für ihre Existenz hat. In dem Fall sind das - wie wahsaga schon schrieb - die Reguläre Ausdrücke Funktionen. Die hier interesanten Hinweise stehen dann unter "Anforderungen" bzw. "Installation".

    Jetzt wurde ein kurzes Nachsehen doch nötig. Siehe da, das Handbuch sagt mir: "Stellen Sie sicher, dass Ersatz gültigen PHP-Code erzeugt, weil sich PHP sonst über einen Syntaxfehler (parse error) in der Zeile beschwert, die den Aufruf von preg_replace() enthält."

    Der Satz bezieht sich auf den Modifikator 'e' und hat mit deinem Problem vermutlich nichts zu tun.

    Grüße aus Nürnberg
    Tobias