Я создал обработчик ошибок пользователя и хочу убедиться, что я правильно использую побитовые операторы.
Вот мои настройки конфигурации, чтобы установить, какие ошибки будут обрабатываться каким образом:
// user error logging level (change for production)
define('LEV_USER_ERROR_LOG_LEVEL', E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);
// user error display level (change for production)
define('LEV_USER_ERROR_DISPLAY_LEVEL', E_USER_ERROR);
Вот как я устанавливаю обработчик ошибок пользователя:
// set user error handler
set_error_handler('user_error_handler', E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);
Вот сам обработчик ошибок:
// user error handler
public static function user_error_handler($error_level, $message, $file_name, $line_number) {
if (LEV_USER_ERROR_LOG_LEVEL | LEV_USER_ERROR_DISPLAY_LEVEL == 0) return true;
switch ($error_level) {
case E_USER_ERROR:
if (LEV_USER_ERROR_LOG_LEVEL & E_USER_ERROR) {
error_log('[' . date('Y-m-d h:i:s') . '] User Error: "' . $message . '", File: "'.$file_name.'", Line: '.$line_number.', Request: "' . $_SERVER['ORIG_PATH_INFO'] . "\"\n", 3, 'application/logs/user_error_log.txt');
}
if (LEV_USER_ERROR_DISPLAY_LEVEL & E_USER_ERROR) {
echo '[' . date('Y-m-d h:i:s') . '] User Level Error: "' . $message . '", File: "'.$file_name.'", Line: '.$line_number.'<br />';
}
die;
break;
case E_USER_WARNING:
if (LEV_USER_ERROR_LOG_LEVEL & E_USER_WARNING) {
error_log('[' . date('Y-m-d h:i:s') . '] User Warning: "' . $message . '", File: "'.$file_name.'", Line: '.$line_number.', Request: "' . $_SERVER['ORIG_PATH_INFO'] . "\"\n", 3, 'application/logs/user_error_log.txt');
}
if (LEV_USER_ERROR_DISPLAY_LEVEL & E_USER_WARNING) {
echo '[' . date('Y-m-d h:i:s') . '] User Level Warning: "' . $message . '", File: "'.$file_name.'", Line: '.$line_number.'<br />';
}
break;
case E_USER_NOTICE:
if (LEV_USER_ERROR_LOG_LEVEL & E_USER_NOTICE) {
error_log('[' . date('Y-m-d h:i:s') . '] User Notice: "' . $message . '", File: "'.$file_name.'", Line: '.$line_number.', Request: "' . $_SERVER['ORIG_PATH_INFO'] . "\"\n", 3, 'application/logs/user_error_log.txt');
}
if (LEV_USER_ERROR_DISPLAY_LEVEL & E_USER_NOTICE) {
echo '[' . date('Y-m-d h:i:s') . '] User Level Notice: "' . $message . '", File: "'.$file_name.'", Line: '.$line_number.'<br />';
}
break;
default:
// call PHP internal error handler
return false;
}
// do not call PHP internal error handler
return true;
}
Вопросы:
- Оператор побитового ИЛИ, используемый в настройках моего обработчика, сделает так, чтобы обработчик ошибок вызывался ТОЛЬКО при возникновении одной из этих трех ошибок?
- Оператор побитового ИЛИ, использованный в первой строке моего обработчика ошибок, сделает так, что ТОЛЬКО если оба параметра конфигурации будут установлены на ноль, функция завершится?