Меню

Php отключить вывод ошибок deprecated

Настройка во время выполнения

Поведение этих функций зависит от установок в php.ini.

Настройки конфигурации протоколирования событий и ошибок

Имя По умолчанию Место изменения Список изменений
error_reporting NULL PHP_INI_ALL  
display_errors «1» PHP_INI_ALL  
display_startup_errors «1» PHP_INI_ALL До PHP 8.0.0 значение по умолчанию было "0".
log_errors «0» PHP_INI_ALL  
log_errors_max_len «1024» PHP_INI_ALL  
ignore_repeated_errors «0» PHP_INI_ALL  
ignore_repeated_source «0» PHP_INI_ALL  
report_memleaks «1» PHP_INI_ALL  
track_errors «0» PHP_INI_ALL Объявлено устаревшим в PHP 7.2.0, удалено в PHP 8.0.0.
html_errors «1» PHP_INI_ALL  
xmlrpc_errors «0» PHP_INI_SYSTEM  
xmlrpc_error_number «0» PHP_INI_ALL  
docref_root «» PHP_INI_ALL  
docref_ext «» PHP_INI_ALL  
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  
error_log_mode 0o644 PHP_INI_ALL Доступно, начиная с PHP 8.2.0
syslog.facility «LOG_USER» PHP_INI_SYSTEM Доступно, начиная с PHP 7.3.0.
syslog.filter «no-ctrl» PHP_INI_ALL Доступно, начиная с PHP 7.3.0.
syslog.ident «php» PHP_INI_SYSTEM Доступно, начиная с PHP 7.3.0.

Для подробного описания констант
PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных
директив.

error_reporting
int

Задаёт уровень протоколирования ошибки. Параметр может быть либо числом,
представляющим битовое поле, либо именованной константой.
Соответствующие уровни и константы приведены в разделе
Предопределённые константы,
а также в php.ini. Для установки настройки во время выполнения используйте функцию
error_reporting(). Смотрите также описание директивы
display_errors.

Значение по умолчанию равно E_ALL.

До PHP 8.0.0 значение по умолчанию было:
E_ALL &
~E_NOTICE &
~E_STRICT &
~E_DEPRECATED
.
При этой настройке не отображаются уровни ошибок E_NOTICE,
E_STRICT и E_DEPRECATED.

Замечание:
PHP-константы за пределами PHP

Использование PHP-констант за пределами PHP, например в файле
httpd.conf, не имеет смысла, так как в таких случаях требуются
целочисленные значения (int). Более того, с течением времени будут
добавляться новые уровни ошибок, а максимальное значение константы
E_ALL соответственно будет расти. Поэтому в месте, где
предполагается указать E_ALL, лучше задать большое целое число,
чтобы перекрыть все возможные битовые поля. Таким числом может быть, например,
2147483647 (оно включит все возможные ошибки, не
только E_ALL).

display_errors
string

Эта настройка определяет, требуется ли выводить ошибки на экран вместе
с остальным выводом, либо ошибки должны быть скрыты от пользователя.

Значение "stderr" посылает ошибки в поток stderr
вместо stdout.

Замечание:

Эта функциональность предназначена только для разработки и не должен использоваться в
готовых производственных системах (например, системах, имеющих доступ в интернет).

Замечание:

Несмотря на то, что display_errors может быть установлена во время выполнения
(функцией ini_set()), это ни на что не повлияет, если в скрипте есть
фатальные ошибки. Это обусловлено тем, что ожидаемые действия программы во время
выполнения не получат управления (не будут выполняться).

display_startup_errors
bool

Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут
отображаться. Настойчиво рекомендуем включать директиву display_startup_errors только
для отладки.

log_errors
bool

Отвечает за выбор журнала, в котором будут сохраняться сообщения об ошибках. Это
может быть журнал сервера или error_log.
Применимость этой настройки зависит от конкретного сервера.

Замечание:

Настоятельно рекомендуем при работе на готовых работающих
web сайтах протоколировать ошибки там, где они отображаются.

log_errors_max_len
int

Задание максимальной длины log_errors в байтах. В
error_log добавляется информация
об источнике. Значение по умолчанию 1024. Установка значения в 0
позволяет снять ограничение на длину log_errors. Это ограничение
распространяется на записываемые в журнал ошибки, на отображаемые ошибки,
а также на $php_errormsg, но не на явно вызываемые функции,
такие как error_log().

Если используется int, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ.

ignore_repeated_errors
bool

Не заносить в журнал повторяющиеся ошибки. Ошибка считается
повторяющейся, если происходит в том же файле и в той же строке, и если настройка
ignore_repeated_source выключена.

ignore_repeated_source
bool

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

report_memleaks
bool

Если настройка включена (по умолчанию), будет формироваться отчёт об утечках памяти,
зафиксированных менеджером памяти Zend. На POSIX платформах этот отчёт будет
направляться в поток stderr. На Windows платформах он будет посылаться в отладчик
функцией OutputDebugString(), просмотреть отчёт в этом случае можно с помощью утилит,
вроде » DbgView. Эта настройка имеет
смысл в сборках, предназначенных для отладки. При этом
E_WARNING должна быть включена в список error_reporting.

track_errors
bool

Если включена, последняя произошедшая ошибка будет первой в переменной
$php_errormsg.

html_errors
bool

Если разрешена, сообщения об ошибках будут включать теги HTML. Формат для
HTML-ошибок производит нажимаемые ссылки, ведущие на описание ошибки, либо
функии, в которой она произошла. За такие ссылки ответственны
docref_root и
docref_ext.

Если запрещена, то ошибки будут выдаваться простым текстом, без форматирования.

xmlrpc_errors
bool

Если включена, то нормальное оповещение об ошибках отключается и, вместо него,
ошибки выводятся в формате XML-RPC.

xmlrpc_error_number
int

Используется в качестве значения XML-RPC элемента faultCode.

docref_root
string

Новый формат ошибок содержит ссылку на страницу с описанием ошибки или
функции, вызвавшей эту ошибку. Можно разместить копию
описаний ошибок и функций локально и задать ini директиве значение
URL этой копии. Если, например, локальная копия описаний доступна по
адресу "/manual/", достаточно прописать
docref_root=/manual/. Дополнительно, необходимо
задать значение директиве docref_ext, отвечающей за соответствие
расширений файлов файлам описаний вашей локальной копии,
docref_ext=.html. Также возможно использование
внешних ссылок. Например,
docref_root=http://manual/en/ или
docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon
&url=http%3A%2F%2Fwww.php.net%2F"

В большинстве случаев вам потребуется, чтобы значение docref_root оканчивалось
слешем "/". Тем не менее, бывают случаи, когда
это не требуется (смотрите выше, второй пример).

Замечание:

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

docref_ext
string

Смотрите docref_root.

Замечание:

Значение docref_ext должно начинаться с точки ".".

error_prepend_string
string

Строка, которая будет выводиться непосредственно перед сообщением об ошибке.
Используется только тогда, когда на экране отображается сообщение об ошибке.
Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке.

error_append_string
string

Строка, которая будет выводиться после сообщения об ошибке.
Используется только тогда, когда на экране отображается сообщение об ошибке.
Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке.

error_log
string

Имя файла, в который будут добавляться сообщения об ошибках. Файл
должен быть открыт для записи пользователем веб-сервера. Если
используется специальное значение syslog, то
сообщения будут посылаться в системный журнал. На Unix-системах это
syslog(3), на Windows NT — журнал событий. Смотрите также: syslog().
Если директива не задана, ошибки будут направляться в SAPI журналы.
Например, это могут быть журналы ошибок Apache или поток
stderr командной строки CLI.
Смотрите также функцию error_log().

error_log_mode
int

Режим файла, описанного в error_log.

syslog.facility
string

Указывает, какой тип программы регистрирует сообщение.
Действует только в том случае, если опция error_log установлена в «syslog».

syslog.filter
string

Указывает тип фильтра для фильтрации регистрируемых сообщений.
Разрешённые символы передаются без изменений; все остальные записываются в шестнадцатеричном представлении с префиксом x.

  • all – строка будет разделена
    на символы новой строки и все символы будут переданы без изменений
  • ascii – строка будет разделена
    на символы новой строки, а любые непечатаемые 7-битные символы ASCII будут экранированы
  • no-ctrl – строка будет разделена
    на символы новой строки, а любые непечатаемые символы будут экранированы
  • raw – все символы передаются в системный
    журнал без изменений, без разделения на новые строки (идентично PHP до 7.3)

Параметр влияет на ведение журнала через error_log установленного в «syslog» и вызовы syslog().

Замечание:

Тип фильтра raw доступен начиная с PHP 7.3.8 и PHP 7.4.0.


Директива не поддерживается в Windows.

syslog.ident
string

Определяет строку идентификатора, которая добавляется к каждому сообщению.
Действует только в том случае, если опция error_log установлена в «syslog».

cjakeman at bcs dot org

13 years ago


Using

<?php ini_set('display_errors', 1); ?>

at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.

This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set

display_errors On

then there is a possible solution suggested under error_reporting:

<?php

error_reporting
(E_ALL);

ini_set("display_errors", 1);

include(
"file_with_errors.php");

?>

[Modified by moderator]

You should also consider setting error_reporting = -1 in your php.ini and display_errors = On if you are in development mode to see all fatal/parse errors or set error_log to your desired file to log errors instead of display_errors in production (this requires log_errors to be turned on).


ohcc at 163 dot com

6 years ago


If you set the error_log directive to a relative path, it is a path relative to the document root rather than php's containing folder.

iio7 at protonmail dot com

1 year ago


It's important to note that when display_errors is "on", PHP will send a HTTP 200 OK status code even when there is an error. This is not a mistake or a wrong behavior, but is because you're asking PHP to output normal HTML, i.e. the error message, to the browser.

When display_errors is set to "off", PHP will send a HTTP 500 Internal Server Error, and let the web server handle it from there. If the web server is setup to intercept FastCGI errors (in case of NGINX), it will display the 500 error page it has setup. If the web server cannot intercept FastCGI errors, or it isn't setup to do it, an empty screen will be displayed in the browser (the famous white screen of death).

If you need a custom error page but cannot intercept PHP errors on the web server you're using, you can use PHPs custom error and exception handling mechanism. If you combine that with output buffering you can prevent any output to reach the client before the error/exception occurs. Just remember that parse errors are compile time errors that cannot be handled by a custom handler, use "php -l foo.php" from the terminal to check for parse errors before putting your files on production.


Roger

3 years ago


When `error_log` is set to a file path, log messages will automatically be prefixed with timestamp [DD-MMM-YYYY HH:MM:SS UTC].  This appears to be hard-coded, with no formatting options.

php dot net at sp-in dot dk

8 years ago


There does not appear to be a way to set a tag / ident / program for log entries in the ini file when using error_log=syslog.  When I test locally, "apache2" is used.
However, calling openlog() with an ident parameter early in your script (or using an auto_prepend_file) will make PHP use that value for all subsequent log entries. closelog() will restore the original tag.

This can be done for setting facility as well, although the original value does not seem to be restored by closelog().


jaymore at gmail dot com

6 years ago


Document says
So in place of E_ALL consider using a larger value to cover all bit fields from now and well into the future, a numeric value like 2147483647 (includes all errors, not just E_ALL).

But it is better to set "-1" as the E_ALL value.
For example, in httpd.conf or .htaccess, use
php_value error_reporting -1
to report all kind of error without be worried by the PHP version.


When PHP runs as an Apache module, you can access/change any configuration setting available in php.ini using directives in Apache configuration files. Those directives are…

  • php_value
  • php_flag
  • php_admin_value
  • php_admin_flag

The difference between the php_* and php_admin_* versions is the key to this issue. Values set using php_admin_value and php_admin_flag can only be set in Apache global and VirtualHost configs; they are not overrideable by .htaccess or ini.set().

The error_reporting() function is equivalent to an ini_set() call, and falls under the same rules.

So I went into the virtualhost configuration for the site in question, and added the following lines…

php_admin_value error_reporting 22527
php_admin_value error_log /custom/log/path/php_errors.log
php_admin_flag  log_errors On
php_admin_flag  display_errors Off
  1. The first line is the bitwise value for error_reporting = E_ALL & ~E_DEPRECATED. I retrieved this value by creating a simple script:

    ini_set("error_reporting", E_ALL & ~E_DEPRECATED);
    echo ini_get("error_reporting");
    

    If you want to ignore system notices along with deprecation alerts — error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE — the bitwise value is 22519.

  2. The second line sends all PHP errors to a custom log. By default PHP will use the syslog value, usually /var/log/apache2/error.log or something similar.

  3. The third line enables file logging.

  4. Last one turns off on-page error display.

Again, the priority and order of operations is key here. These values supersede those defined in php.ini, and at the same time cannot be overridden by other changes within the application or in .htaccess files.

More details on changing configuration values outside php.ini can be found in the PHP documentation.

Home / Prevent E_DEPRECATED error messages in PHP

PHP 5.3 introduced a new error reporting level E_DEPRECATED which is triggered when deprecated functions and methods are used, such as the old style ereg() regular expression functions. This post shows how to suppress E_DEPRECATED error messages.

In PHP.ini

To show all errors other than E_DEPRECATED in the php.ini file, adjust the error_reporting setting as shown below. Note this should only be done for installs of PHP 5.3+.

error_reporting = E_ALL & ~E_DEPRECATED

To suppress notices as well:

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

In code with error_reporting

You can either straight out set the error reporting level like so:

error_reporting(E_ALL &~ E_DEPRECATED);
error_reporting(E_ALL &~ E_NOTICE &~ E_DEPRECATED);

or remove E_DEPRECATED from the current error_reporting level:

error_reporting(error_reporting() & ~E_DEPRECATED);

Making it safe for earlier versions of PHP

The only catch with the above error_reporting examples is that if you’re running the same code on e.g. PHP 5.2 as well as PHP 5.3 then you’ll get a notice in PHP 5.2 (and earlier) like «Notice: Use of undefined constant E_DEPRECATED».

To avoid triggering this notice check if E_DEPRECATED is defined:

if(defined('E_DEPRECATED')) {
    error_reporting(E_ALL &~ E_DEPRECATED);
}
if(defined('E_DEPRECATED')) {
    error_reporting(error_reporting() & ~E_DEPRECATED);
}

Development vs production

While you certainly won’t want to trigger E_DEPRECATED messages in production, you may well want to show them in development to make it easy to locate and update code with deprecated functions. (Note you can suppress the display of error messages regardless of the error_reporting level with display_errors).

In my case, I’ve been using SilverStripe 2.4 which occasionally makes use of the ereg() functions and I prefer not to have the messages displayed even in development. SS 3 will come out later this year and I’m sure they’ll have replaced the ereg functions with preg equivilents. Maybe then I’ll switch back E_DEPRECATED in development.

Поведение этих функций зависит от установок в php.ini.

Настройки конфигурации протоколирования событий и ошибок

Имя По умолчанию Меняемо Список изменений
error_reporting NULL PHP_INI_ALL  
display_errors «1» PHP_INI_ALL  
display_startup_errors «0» PHP_INI_ALL  
log_errors «0» PHP_INI_ALL  
log_errors_max_len «1024» PHP_INI_ALL Доступно, начиная с PHP 4.3.0.
ignore_repeated_errors «0» PHP_INI_ALL Доступно, начиная с PHP 4.3.0.
ignore_repeated_source «0» PHP_INI_ALL Доступно, начиная с PHP 4.3.0.
report_memleaks «1» PHP_INI_ALL Доступно, начиная с PHP 4.3.0.
track_errors «0» PHP_INI_ALL  
html_errors «1» PHP_INI_ALL PHP_INI_SYSTEM в PHP <= 4.2.3.
xmlrpc_errors «0» PHP_INI_SYSTEM Доступно, начиная с PHP 4.1.0.
xmlrpc_error_number «0» PHP_INI_ALL Доступно, начиная с PHP 4.1.0.
docref_root «» PHP_INI_ALL Доступно, начиная с PHP 4.3.0.
docref_ext «» PHP_INI_ALL Доступно, начиная с PHP 4.3.2.
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  

Для подробного описания констант
PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных
директив.

error_reporting
integer

Задает уровень протоколирования ошибки. Параметр может быть либо числом,
представляющим битовое поле, либо именованной константой.
Соответствующие уровни и константы приведены в разделе
Предопределенные константы,
а также в php.ini. Для установки настройки во время выполнения
используйте функцию error_reporting(). См. также
описание директивы
display_errors.

В PHP 5.3 и новее later, значение по умолчанию равно
E_ALL &
~E_NOTICE &
~E_STRICT &
~E_DEPRECATED. При этой настройке на отображаются уровни ошибок
E_NOTICE, E_STRICT
и E_DEPRECATED. Можно отображать их при разработке.
До версии PHP 5.3.0, значением по умолчанию было
E_ALL &
~E_NOTICE &
~E_STRICT.
В PHP 4 значением по умолчанию было E_ALL
& ~E_NOTICE.

Замечание:

Включение E_NOTICE во время разработки имеет ряд
преимуществ. Для отладки: NOTICE сообщения могут предупреждать о
возможных ошибках в коде. Например, использование
непроинициализированных переменных вызовет подобное сообщение. Это
очень полезно при поиске опечаток и экономит время при отладке.
NOTICE сообщения также предупреждают о плохом стиле. Например,
$arr[item] лучше писать так:
$arr[‘item’] с тех пор, как PHP начал интерпретировать
«item» как константу. Если это не константа, PHP
принимает это выражение за строковый индекс элемента массива.

Замечание:

В PHP 5 доступен новый уровень ошибок E_STRICT.
Так как E_STRICT не входит в состав
E_ALL, необходимо явно включать этот уровень
ошибок. Включение E_STRICT во время разработки
также имеет свои преимущества. STRICT сообщения предлагают подсказки, которые могут помочь
обеспечить лучшую функциональную и обратную совместимость вашего кода.
Эти сообщения могут включать в себя такие вещи, как вызов нестатических методов
статически, определение свойств в совместимого класса, в то время как
они уже определены в используемом трейте, и до PHP 5.3 некоторые устаревшие возможности также
будут выдавать ошибки уровня E_STRICT, такие как присвоение
объектов по ссылке при создании экземпляра.

Замечание:
PHP константы за пределами PHP

Использование PHP констант за пределами PHP, например в файле
httpd.conf, не имеет смысла, так как в таких
случаях требуются целочисленные значения (integer). Более
того, с течением времени будут добавляться новые уровни ошибок, а
максимальное значение константы E_ALL соответственно
будет расти. Поэтому в месте, где предполагается указать
E_ALL, лучше задать большое целое число, чтобы
перекрыть все возможные битовые поля. Таким числом может быть, например,
2147483647 (оно включит все возможные ошибки, не
только E_ALL).

display_errors
string

Эта настройка определяет, требуется ли выводить ошибки на экран вместе
с остальным выводом, либо ошибки должны быть скрыты от пользователя.

Значение «stderr» посылает ошибки в поток
stderr вместо stdout. Значение
доступно в версии PHP 5.2.4. В ранних версиях эта директива имела тип
boolean.

Замечание:

Этот функционал предназначен только для разработки и не должен
использоваться в готовых производственных системах (например,
системах, имеющих доступ в интернет).

Замечание:

Несмотря на то, что display_errors может быть установлена во время
выполнения (функцией ini_set()), это ни на что
не повлияет, если в скрипте есть фатальные ошибки. Это обусловлено
тем, что ожидаемые действия программы во время выполнения не получат
управления (не будут выполняться).

display_startup_errors
boolean

Даже если display_errors включена, ошибки, возникающие во время запуска
PHP, не будут отображаться. Настойчиво рекомендуем включать
директиву display_startup_errors только для отладки.

log_errors
boolean

Отвечает за выбор журнала, в котором будут сохраняться сообщения об
ошибках. Это может быть журнал сервера или
error_log. Применимость этой
настройки зависит от конкретного сервера.

Замечание:

Настоятельно рекомендуем при работе на готовых работающих
web сайтах протоколировать ошибки там, где они отображаются.

log_errors_max_len
integer

Задание максимальной длины log_errors в байтах. В
error_log добавляется информация
об источнике. Значение по умолчанию 1024. Установка значения в 0
позволяет снять ограничение на длину log_errors. Это ограничение
распространяется на записываемые в журнал ошибки, на отображаемые ошибки,
а также на $php_errormsg.

Если используется integer,
значение измеряется байтами. Вы также можете использовать сокращенную запись,
которая описана в этом разделе FAQ.

ignore_repeated_errors
boolean

Не заносить в журнал повторяющиеся ошибки. Ошибка признается
повторяющейся, если происходит в том же файле и в той же строке, и если
настройка
ignore_repeated_source
выключена.

ignore_repeated_source
boolean

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

report_memleaks
boolean

Если настройка включена (по умолчанию), будет формироваться отчет об
утечках памяти, зафиксированных менеджером памяти Zend. На POSIX
платформах этот отчет будет направляться в поток stderr. На Windows
платформах он будет посылаться в отладчик функцией OutputDebugString(),
просмотреть отчет в этом случае можно с помощью утилит, вроде
» DbgView. Эта настройка имеет
смысл в сборках, предназначенных для отладки. При этом
E_WARNING должна быть включена в список
error_reporting.

track_errors
boolean

Если включена, последняя произошедшая ошибка будет первой в переменной
$php_errormsg.

html_errors
boolean

Отключает HTML тэги в сообщениях об ошибках. Новый формат HTML сообщений
об ошибках предоставляет возможность вставлять ссылки в сообщения и
перенаправлять пользователя на страницы с описаниями ошибок. За такие
ссылки ответственны
docref_root и
docref_ext.

xmlrpc_errors
boolean

Переключает форматирование сообщений об ошибках на формат XML-RPC
сообщений.

xmlrpc_error_number
integer

Используется в качестве значения XML-RPC элемента faultCode.

docref_root
string

Новый формат ошибок содержит ссылку на страницу с описанием ошибки или
функции, вызвавшей эту ошибку. Можно разместить копию
описаний ошибок и функций локально и задать ini директиве значение
URL этой копии. Если, например, локальная копия описаний доступна по
адресу «/manual/», достаточно прописать
docref_root=/manual/. Дополнительно, необходимо
задать значение директиве docref_ext, отвечающей за соответствие
расширений файлов файлам описаний вашей локальной копии,
docref_ext=.html. Также возможно использование
внешних ссылок. Например,
docref_root=http://manual/en/ или
docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon
&url=http%3A%2F%2Fwww.php.net%2F"

В большинстве случаев вам потребуется, чтобы значение docref_root оканчивалось
слешем «/». Тем не менее, бывают случаи, когда
это не требуется (см. выше, второй пример).

Замечание:

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

docref_ext
string

См. docref_root.

Замечание:

Значение docref_ext должно начинаться с точки «.».

error_prepend_string
string

Строка, которая будет выводиться непосредственно перед сообщением об
ошибке.

error_append_string
string

Строка, которая будет выводиться после сообщения об ошибке.

error_log
string

Имя файла, в который будут добавляться сообщения об ошибках. Файл
должен быть открыт для записи пользователем web сервера. Если
используется специальное значение syslog, то
сообщения будут посылаться в системный журнал. На Unix системах это
syslog(3), на Windows NT — журнал событий. Системный журнал не
поддерживается в Windows 95. См. также: syslog().
Если директива не задана, ошибки будут направляться в SAPI журналы.
Например, это могут быть журналы ошибок Apache или поток
stderr командной строки CLI.
Смотрите также функцию error_log().

Вернуться к: Установка и настройка

Deprecated: Function is deprecated in
Deprecated: Function is deprecated in

Ваш сайт стал тормозить и посмотрев error.log либо просто зайдя на свой сайт вы увидели одну из ошибок

Код: Выделить всё Развернуть
Deprecated: Function ereg() is deprecated in ...
Deprecated: Function eregi() is deprecated in ...
Deprecated: Function ereg_replace() is deprecated in ...
Deprecated: Function split() is deprecated in ...
Deprecated: Function set_magic_quotes_runtime() is deprecated in ...
Deprecated: Assigning the return value of new by reference is deprecated in ...
Deprecated: Call-time pass-by-reference has been deprecated in ...
Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in ...

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

Есть несколько способов исправления ошибок Deprecated: Function is deprecated in:

1-й способов исправления ошибок Deprecated: Function is deprecated in — простой

Если есть возможность, в панели хостинга сменить версию php на 5.2 или ниже, либо попросить хостера понизить установленную на сервере версию, либо просто переехать на хостинг с php 5.2 или ниже


2-й способов исправления ошибок Deprecated: Function is deprecated in — плохой

в php.ini изменить error_reporting = E_ALL на

Код: Выделить всё Развернуть
E_ALL | E_DEPRECATED

или в .htaccess добавить в начало

Код: Выделить всё Развернуть
php_value display_errors 22527

или в конфигурационный файл движка добавьте в начало после открывающего <?php

Код: Выделить всё Развернуть
ini_set('error_reporting', E_ALL & ~E_DEPRECATED);

или

Код: Выделить всё Развернуть
error_reporting(0);

Этот способ лишь отключит вывод ошибок об устаревших функциях, но сами функции работать не будет.


3-й способов исправления ошибок Deprecated: Function is deprecated in — временный

В php 5.3 не убрали устаревшие функции и лишь предупреждают о том что они устарели, в php 5.4 и выше они удалены.
Поэтому если на сервере php 5.3, то работоспособность функций можно включить.

Идем в php.ini и ищем блок

Код: Выделить всё Развернуть
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; //php.net/mbstring.func-overload
; mbstring.func_overload = 0

либо создаем свой php.ini, если хостер позволяет таким способом управлять настройками php.

  • 0 — Оставить все без изменений.
  • 1-4 Включить одну из функций.
  • 7 — Включить сразу все функции.

Слово «включить» тут не совсем корректно. Речь идет об включении поддерживания старых функций, при этом новые будут отключены.
Убираем ; строку и присваиваем включить старые функции

Код: Выделить всё Развернуть
mbstring.func_overload = 7

4-й способов исправления ошибок Deprecated: Function is deprecated in — исправление «автоматически»

Большинство движков и модулей/плагинов можно обновить с официальных сайтов до более новых версий , в которых уже исправлены устаревшие функции (либо обратиться в техподдержку с просьбой выпуска исправленных версий)


5-й способов исправления ошибок Deprecated: Function is deprecated in — исправление «вручную»

Однако есть движки/модули/плагины, которые больше не поддерживаются и не разрабатываются.
Это не проблема — функции можно поправить вручную.

Вот небольшая шпаргалка(использование — функции заменить, параметры экранировать слешем / либо иногда ~ ):

call_user_method() использовать call_user_func()
call_user_method_array() использовать call_user_func_array()
define_syslog_variables()
dl()
ereg() использовать preg_match()
ereg_replace() использовать preg_replace()
eregi() использовать preg_match() с модификатором «i»
eregi_replace() использовать preg_replace() с модификатором «i»
set_magic_quotes_runtime() использовать magic_quotes_runtime()
session_register() использовать $_SESSION
session_unregister() использовать $_SESSION
session_is_registered() использовать $_SESSION
set_socket_blocking() использовать stream_set_blocking()
split() использовать preg_split() или explode()
spliti() использовать preg_split() с модификатором «i»
sql_regcase()
mysql_db_query() использовать mysql_select_db() и mysql_query()
mysql_escape_string() использовать mysql_real_escape_string()

Примеры замены:

1.
до

Код: Выделить всё Развернуть
if (eregi('^new=([a-z0-9]+)', $_GET['src'], $matches)) {

после

Код: Выделить всё Развернуть
if (preg_match('/^new=([a-z0-9]+)/i', $_GET['src'], $matches)) {

2.
до

Код: Выделить всё Развернуть
if (eregi('^(f|ht)tps?://', $_GET['src'])) {

после

Код: Выделить всё Развернуть
if (preg_match('~^(f|ht)tps?://~i', $_GET['src'])) {

3.
до

Код: Выделить всё Развернуть
if (ereg('^'.preg_quote($nice_docroot).'(.*)$', $nice_cachefile, $matches)) {

после

Код: Выделить всё Развернуть
if (preg_match('/^/'.preg_quote($nice_docroot).'(.*)$', $nice_cachefile, $matches)) {

4.
до

Код: Выделить всё Развернуть
return ereg_replace('2037' . '$', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));

после

Код: Выделить всё Развернуть
return preg_replace('/2037$/', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));

5.
до

Код: Выделить всё Развернуть
$str = split("n",$which_text);

после

Код: Выделить всё Развернуть
$str = explode("n",$which_text);

6.
до

Код: Выделить всё Развернуть
$pieces = split('[[:space:]]+', $search_str);

после

Код: Выделить всё Развернуть
$pieces = preg_split('/[[:space:]]+/', $search_str);

7.
до

Код: Выделить всё Развернуть
$temp_array = split($needle, $string);

после

Код: Выделить всё Развернуть
$temp_array = preg_split('/' . $needle . '/', $string);

8.
до

Код: Выделить всё Развернуть
set_magic_quotes_runtime(0);

после

Код: Выделить всё Развернуть
ini_set("magic_quotes_runtime", 0);

9.
до

Код: Выделить всё Развернуть
..
$mqr=get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
..
set_magic_quotes_runtime($mqr);
..

после

Код: Выделить всё Развернуть
..
//$mqr=get_magic_quotes_runtime();
ini_set("magic_quotes_runtime", 0);
..
//set_magic_quotes_runtime($mqr);

Почти всегда используется слеш / в качестве экрана. Но иногда он не срабатывает и появляется ошибка

Код: Выделить всё Развернуть
Warning:preg_match() [function.preg-match]: Unknown modifier 'тут_любая_буква_или_знак' in home/../файл.php

В таких случаях используйте в качестве экрана ~..~ (или ~..~i) , вместо /../ (или /../i)

Такие предупреждения

PHP Deprecated: Assigning the return value of new by reference is deprecated in..
PHP Deprecated: Call-time pass-by-reference has been deprecated in..

говорят, что в функциях используется амперстанд &, его надо удалить:

1.
до

Код: Выделить всё Развернуть
$contentElement =& new ContentElement( $xmlDoc );

после

Код: Выделить всё Развернуть
$contentElement = new ContentElement( $xmlDoc );

2.
до

Код: Выделить всё Развернуть
preg_match_all( $pattern, $text, &$links, PREG_SET_ORDER );

после

Код: Выделить всё Развернуть
preg_match_all( $pattern, $text, $links, PREG_SET_ORDER );
//set_magic_quotes_runtime($mqr);

Если после замены mysql_escape_string() на mysql_real_escape_string() получаете

Warning: mysql_real_escape_string(): A link to the server could not be established in..

проверяйте код, т.к. обязательно перед этой функцией должна идти фукнция открытия соединения с базой.

Данное предупреждение связано с использованием PHP версии 5.3 или выше.   В PHP 5.3 некоторые функции, параметры и возможности были отмечены как DEPRECATED (НЕИСПОЛЬЗУЕМЫЕ). В последующих версиях они будут удалены.

В частности, неиспользуемой возможностью стало использование конструкций вида:
$instance = & new SimpleClass();

Можно либо

1) перейти на более старую версию PHP

2) отключить показ DEPRECATE ошибок

Для этого в  php.ini установить:

error_reporting =E_ALL &~ E_DEPRECATED

или в PHP файле задать:

error_reporting (E_ALL &~ E_DEPRECATED);

Можно с помощью функции phpinfo() проверить каким на данный момент установлен уровень error_reporting. Он показывается там числовым значением.

Если указанный способ отключить показ DEPRECATED не работает — проверьте наличае других вызовов функции error_reporing.

Но нужно учесть, что с выходом PHP 6.0 данная конструкция будет вообще запрещена к использованию.

3) А лучше всего — немножко поредактировать код.

Например, большинство DEPRECATED в коде Joomla 1.0 и разных модулей было связано именно с использованием & перед new. Например:

$module =& new ExtendedMenuModule();

Нужно просто удалить &.

Однако таких мест много. Но, если мы используем Eclipse, то просто заменить все вхождения «& new» на «new» во всех файлах. Для этого в меню выбираем Search>Search. Далее выбираем FileSearch, в поле containing text вводим «& new», нажимаем на кнопку Replace.

Будет осуществлён поиск по всем файлам проекта. И через некоторое время появится окошко Replace Text Matches.

C помощью кнопки Preview рассматриваем код, в котором будет произведена замена. И если всё нам нравится — то в нём в поле With вводим » new». И нажимаем OK

Если не сработало (у меня почему-то так произошло) обновляем весь проект (устанавливаем курсор на папку проекта и нажимаем F5) и повторям замену.

Возможны и исключения. Например, modulesexmenuloadermenu.menuloader.class.php on line 286. Если там удалить &, то меню работает некорректно.

Подробнее об изменениях в версии 5.3: http://php.su/php/?migration53

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Php отдать ошибку 404
  • Php обработка фатальных ошибок