PHP: Leerzeilenunterdrückung mit OPcache
Heute wird es einmal technisch. Da ich jetzt fast drei Stunden über einem Problem bei PHP gehockt war, möchte ich euch die Lösung nicht vorenthalten. [OK, die ersten 2 Stunden waren erst einmal die Suche bis ich auf das PHP-Skript gekommen bin.] Es geht um unterschiedliche Ausgaben bei print() mit und ohne OPcache.
Ich benötige für ein internes System auf meinem Server für E-Mail-Aliasadressen das Postfach. Das erledigt ein kleines PHP-Skript. Beim Aufbau eines Mail-Clusters waren jetzt zwei Systeme vorhanden, welche vom Prinzip her identisch waren. Der einzige Unterschied war, dass bei der Ausgabe des Skriptes beim „alten“ Server keine Leerzeile, beim „neuen“ jedoch eine vorhanden war. Da die Adresse dann weiter verwendet wurde und daraus ein Hash gebildet werden musste hat das natürlich nicht geklappt.
Gewünschtes Ergebnis und Ist-Zustand auf dem „alten“ Server: Fehlerhaftes Ergebnis auf dem „neuen“ Server: Nach langer Suche ist mir dann ein Unterschied aufgefallen. Auf dem „alten“ Server ist das OPcahce Modul geladen, welches am neuen Server fehlt. Dort ist kein Webserver vorhanden und PHP nur für einige Systemskripte notwendig. Deswegen wurde PHP noch nicht weiter optimiert. Durch das Hinzufügen der folgenden Einstellung in die php.ini bzw. einer anderen Konfigurationsdatei (ich nutze bei mir eine entsprechende Datei im conf.d Verzeichnis unter /etc/php/) wird der OPcache geladen: Mit diesem Modul wird die oben vorhandene Leerzeiche nicht mehr mit ausgegeben und das Skript macht auf beiden Maschinen genau das, was es soll und ich es erwarte.# ./getMailAliasTarget.php mail@adresse.de
mail@adresse.de
#./getMailAliasTarget.php mail@adresse.de
mail@adresse.de
#zend_extension=opcache