Warnings (error_log) bei PHP 8

25. Februar 2023

 

Seit PHP 8 werden auch standardmäßig Warnings im Error-Log protokolliert. Das führt dazu dass bereits bei einer OXID 6 Installation das Logfile entsprechend „gefüllt“ wird. Diverse Drittanbieter-Module multiplizieren diese Einträge pro Aufruf.

error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE);

Grundsätzlich wird in der bootstrap.php das Error-Level gesetzt. Jedoch wird dies anschließend in der ShopControl.php überschrieben. In der Methode _getErrorReportingLevel() wird je nach Bedingung der Wert wieder überschrieben.

protected function _getErrorReportingLevel() // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
{
$errorReporting = E_ALL ^ E_NOTICE;
// some 3rd party libraries still use deprecated functions
if (defined('E_DEPRECATED')) {
$errorReporting = $errorReporting ^ E_DEPRECATED;
}
if ($this->getConfig()->isProductiveMode() && !ini_get('log_errors')) {
$errorReporting = 0;
}
return $errorReporting;
}

Je nach Webserver-Konfiguration ist log_errors in der Standardkonfiguration aktiv. In diesem Fall und bei aktivem Produktivmodus werden weiterhin die Meldungen (Warnings) ins Error-Log geschrieben.

Um dies zu verhindern reicht es aus in der config.inc.php folgende Code-Zeile einzufügen:

ini_set('log_errors', 0);

UPDATE 26.02.23: Um das Log-Level zu konfigurieren gibt es ein Open-Source Modul von Y-SQUARE.