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