Rolf B: E_NOTICE per php.ini ausschließen im Error-Log

Beitrag lesen

Hallo Ingo,

der Unterschied ist:

  • In der PHP.INI notierst Du Konfigurationsoptionen im uralten INI Format. Es besteht aus Abschnitten, in denen Name-Wert Paare notiert werden. Zwischen Name und Wert steht ein Gleichheitszeichen. Die Abschnittsnamen werden von PHP allerdings stillschweigend ignoriert.

  • In deinem PHP Programm kannst Du die ini_set(name, wert)-Funktion aufrufen, mit der sich einige der Konfigurationsoptionen zur Laufzeit überschreiben lassen. Welche das sind, steht hier in der Spalte Changeable. Die Erklärung der Werte in dieser Spalte ist dort über der Liste verlinkt. Und jede der Optionen in der Liste ist ein Link zu ihrer Erklärung.

Die E_ Konstanten definieren einzelne Bits in den Fehlerbehandlungsoptionen. Beispielsweise ist E_ERROR=1, E_WARNING=2 oder E_NOTICE=8. Das sind alles Zweierpotenzen, außer E_ALL, das ist die Kombination aus allen anderen Werten.

Solche "Bitsammlungen" sind eine Speicherspartechnik aus der Urzeit der Programmierung. Man darf die einzelnen Werte nicht einfach addieren, das kann schiefgehen wenn man bspw. E_ALL und E_NOTICE addiert. Bei Bitsammlungen muss man mit & für "UND", | für "ODER" und ~ für "NICHT" arbeiten, d.h. um in einer Bitsammlung ein Bit zu setzen, verwendet man ODER:

$bits = $bits | E_WARNING;

Um es zu löschen, verwendet man UND NICHT:

$bits = $bits & ~E_WARNING;

Und man testet es mit UND

if ($bits & E_WARNING) { 
   // Warnungen sind eingeschaltet
}

Das ~ ist nicht das normale NICHT von PHP, das mit dem Ausrufezeichen gebildet wird. Das Ergebnis von ! ist immer boolean, d.h. true oder false, aber der ~ Operator bedeutet: invertiere jedes einzelne Bit in einer Zahl. Und genau das braucht man für Bit-Operationen.

Die E-Konstanten und die Operatoren &, | und ~ kannst Du in PHP verwenden und laut Handbuch auch in der PHP.INI - anders als Raketenwilli schrieb. Da hat er sich geirrt.

Man kann auch in der Apache-Konfiguration PHP Konfigurationsoptionen hinterlegen. Dort sind die E_-Konstanten nicht verwendbar, da brauchst Du den Zahlenwert. Um den zu erhalten, rechnest Du das entweder von Hand aus, oder Du schreibst Dir ein kleines PHP Script, das den Zahlenwert mit echo ausgibt.

Rolf

--
sumpsi - posui - obstruxi