Молчание E_DEPRECATED в php

У меня есть одна проблема с отключением отображения устаревших ошибок в php. В моем проекте используется много устаревших функций. Это очень большой проект, поэтому на данный момент я не могу заменить эти функции на неустаревшие this.

Для этой функции: mcrypt_create_iv выдает ошибку ErrorException с сообщением "Функция mcrypt_create_iv() устарела".

Как я могу отключить его? Я пробовал много способов, и это не кидает, только если error_reporting == 0.

Когда сообщение об ошибке:

error_reporting(E_ALL ^ (E_DEPRECATED | E_USER_DEPRECATED | E_NOTICE | E_STRICT  | E_CORE_ERROR | E_PARSE | E_USER_NOTICE | E_RECOVERABLE_ERROR | E_WARNING | E_USER_WARNING | E_USER_ERROR | E_COMPILE_WARNING | E_CORE_WARNING | E_ERROR));

все работает, но если я удалю только один флаг, я увижу ошибку на своем экране.

Вы знаете какие-нибудь идеи?

Я использую PHP 7.1:

PHP 7.1.10 (cli) (built: Oct 10 2017 01:30:46) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.10, Copyright (c) 1999-2017, by Zend Technologies

person Daniel Hornik    schedule 07.11.2017    source источник
comment
Я предлагаю вам не игнорировать устаревшие предупреждения, потому что это признак того, что используемая вами функция будет удалена в будущем.   -  person Variable    schedule 07.11.2017


Ответы (1)


Во-первых, ваша конфигурация error_reporting() кажется мне немного странной. Вы включаете E_ALL, но затем удаляете все? Кажется, было бы лучше просто перечислить то, что вы хотите видеть, вместо того, чтобы исключать все подряд. Это может быть одной из причин того, что он такой обидчивый.

Во-вторых, лучше оставить отчеты об ошибках включенными и настроить другие настройки, связанные с ошибками. . Сделайте так, чтобы ошибки были видны только в файлах журналов для вашего просмотра. См.: http://php.net/manual/en/errorfunc.configuration.php< /а>

error_reporting=E_ALL
display_errors=no
log_errors=yes
error_log=/var/log/php/errors.log

Наконец, если ничего не помогает, вы можете избежать этого предупреждения, используя @ подавление. Это не очень хорошая идея, потому что вы забудете, что эта проблема существует, и, в конце концов, в будущей версии PHP она полностью сломается, поскольку эта устаревшая функция будет удалена. Кроме того, подавляя ошибки, вы потенциально можете пропустить другие проблемы, более важные, чем предупреждение об устаревании.

@mcrypt_create_iv(...); // Suppress errors.
// Last-ditch, last resort. Refrain from using.

http://php.net/manual/en/migration71.deprecated.php

Расширение mcrypt было заброшено уже почти десять лет, а также было довольно сложным в использовании. Поэтому он устарел в пользу OpenSSL, где он будет удален из ядра и включен в PECL в PHP 7.2.

person jaswrks    schedule 07.11.2017
comment
Да, я включил E_ALL и отключил все только для тестов. - person Daniel Hornik; 07.11.2017
comment
@ подавляет любые сообщения об ошибках, которые может вызвать этот вызов, а не только уведомления об устаревании. Реально плохая идея. - person Sammitch; 07.11.2017
comment
В версии 7.0 экранирование функции с помощью @ НЕ не подавляет предупреждения об устаревании. - person lucifurious; 01.06.2018