Как отключить запись ошибок отключенной функции, несмотря на оператор @?

Кто-нибудь знает, как сделать отключенную функцию (в моем случае 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 ответ

Решение

Оператор контроля ошибок @ обычно подавляет сообщение об ошибке, однако пользовательский обработчик ошибок, определенный с set_error_handler все еще может вызвать ошибку, чтобы быть зарегистрированным через 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

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

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

Другие вопросы по тегам