Как отключить ведение журнала ошибок отключенной функции, несмотря на оператор @? - PullRequest
0 голосов
/ 30 апреля 2018

Кто-нибудь знает, как заставить отключенную функцию (в моем случае ini_set()) перестать выдавать ошибку? У меня обычно это похоже на @ini_set(), но на этом плагине WP, он по-прежнему заполняет error_log:

[30-Apr-2018 12:01:39 UTC] Календарь событий многофункционального устройства: ini_set () отключен по соображениям безопасности @ / home / burp / public_html / wp-content / plugins / all-in -one-event-calendar / all-in-one-event-calendar.php: 81 # 2

Я подозреваю, что это потому, что ini_set фактически устанавливает функцию обратного вызова, и другая ini_set () вызывается в этой определенной функции ini_set (). Вот строка 81 в сообщении об ошибке:

@ini_set( 'unserialize_callback_func', 'spl_autoload_call' );

Я администратор сервера, и я отключил ini_set () несколько лет назад, и у меня нет проблем с этим, я просто хочу отключить протоколирование ошибок в этом сценарии. +100 WP сайтов, которые все включают ini_set (), НЕ сообщают о какой-либо ошибке, только эта конкретная, несмотря на @ перед ini_set ().

1 Ответ

0 голосов
/ 30 апреля 2018

Оператор контроля ошибок @ обычно подавляет сообщение об ошибке, однако пользовательский обработчик ошибок, определенный с помощью set_error_handler, может все еще вызывать ошибку, регистрируемую через * 1007. *error_log.

error_reporting вернет 0, если вызову, вызвавшему ошибку, предшествовал @. Функция обработки ошибок должна проверить это перед регистрацией ошибки:

if (error_reporting()) {
    // Report the error
    error_log(...)
}

Глядя на код календаря ниже, вы видите, что error_log вызывается для нефатальных ошибок. Вы можете просто добавить проверку для error_reporting в этом сценарии.

https://github.com/wp-plugins/all-in-one-event-calendar/blob/86c4e20dab7b199b20207fb3918a8807f7342fab/lib/exception/handler.php#L287

В качестве альтернативы вы можете отключить error_log или повторно включить ini_set для этой страницы.

РЕДАКТИРОВАНИЕ ПОСЛЕ MORTEM: Стоит отметить, что, несмотря на то, что в журнале ошибок указано, что ошибка была вызвана отключением ini_set (), ошибка возникла из-за более глубокого обратного вызова функции, определенной в ini_set () в вопросе (строка 81 отображается в OP). Так что, в принципе, ошибка даже не имеет значения. Он всплывает до ini_set () и создает путаницу как причину, и даже строка не об ошибке, которая была фактически выдана.

...