#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...
}