Сообщение об ошибках PHP с помощью конфигурации

#php

#php

Вопрос:

Привет, я пытаюсь заблокировать определенные сообщения об ошибках в переменных конфигурации

 <?php

$config['warnings'] = false;
$config['errors'] = false;

if (!$config['warnings'])
{
     error_reporting(E_ERROR | E_PARSE);
}
if (!config['errors'])
{
     error_reporting(0);
}
?>
 

Но, как вы можете видеть, когда я выполняю еще одно вводное утверждение error_reporting, оно заменяет старое. Как я могу заблокировать, но только если конфигурации стенда имеют значение true и только один, если только для одной конфигурации установлено значение true?

Комментарии:

1. разве вы не должны управлять этим в php.ini?

2. Причины, по которым я хочу это сделать, заключаются в том, что я хочу закодировать свою собственную систему ошибок

3. @Pogrindis Я бы не знал, как это сделать :/

4. но вы должны написать, что у вас нет? Изменение sys php.ini vars incode кажется неправильным..

5. @Pogrindis На самом деле это не редкость для изменения error_reporting() во время выполнения.

Ответ №1:

Подходите к этому как к вложенной логике. Сначала проверьте $config['errors'] и включите или отключите error_reporting с E_ALL помощью или 0 .

Затем вычтите E_WARNING из error_reporting настройки, вызвав error_reporting() inside, чтобы получить текущее значение.

 if ($config['errors']) {
  // Enable all
  error_reporting(E_ALL);

  // Then subtract warnings from the current value
  // by calling error_reporting() as its own argument
  if (!$config['warnings']) {
    error_reporting(error_reporting() amp; ~E_WARNING);
  }
}
else {
  // Or disable everything.
  error_reporting(0);
}
 

Вы конкретно не упоминаете E_NOTICE , но я подозреваю, что вы хотите, чтобы они тоже были отключены.

 error_reporting(error_reporting() amp; ~E_WARNING amp; ~E_NOTICE);
 

Если вы хотите начать с чего — то немного меньшего E_ALL , вы можете удалить E_DEPRECATED и E_STRICT

 if ($config['errors']) {
  // Enable all (but a little less than all)
  error_reporting(E_ALL amp; ~E_DEPRECATED amp; ~E_STRICT);
  // Then check warnings, etc...
}