Отключите предупреждения и ошибки на php / mysql - PullRequest
51 голосов
/ 29 октября 2009

Я получаю ожидаемые уведомления и предупреждения и хочу отключить их в моем php-файле. ошибки:

Warning: fsockopen()

и уведомления:

Notice: A non well formed numeric value encountered in

Я планирую использовать cron для этого php-скрипта и не хочу, чтобы какие-либо ошибки или уведомления регистрировались где-либо.

Ответы [ 6 ]

139 голосов
/ 29 октября 2009

Если вы уверены, что ваш скрипт работает отлично, вы можете избавиться от Предупреждений и уведомлений, например: Поместите эту строку в начало вашего PHP-скрипта:

error_reporting(E_ERROR);

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

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

ОБНОВЛЕНИЕ: как регистрировать ошибки вместо их отображения Как предлагается в комментариях, лучшее решение - записывать ошибки в файл, чтобы сообщения об ошибках могли видеть только разработчики php, а не пользователи. Возможная реализация - через файл .htaccess, полезный, если у вас нет доступа к файлу php.ini ( source ).

# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
# enable PHP error logging
php_flag  log_errors on
php_value error_log  /home/path/public_html/domain/PHP_errors.log
# prevent access to PHP error log
<Files PHP_errors.log>
 Order allow,deny
 Deny from all
 Satisfy All
</Files>
18 голосов
/ 29 октября 2009

Для подавления определенных ошибок добавьте функции с символом «@», в отличие от отключения ВСЕХ сообщений об ошибках.

Подробнее: http://php.net/manual/en/language.operators.errorcontrol.php

PHP поддерживает один оператор контроля ошибок: знак at (@). При добавлении к выражению в PHP любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться.

@fsockopen();

14 голосов
/ 12 августа 2010

Всегда показывать ошибки на тестовом сервере. Никогда не показывать ошибки на рабочем сервере.

Напишите сценарий, чтобы определить, находится ли страница на локальном, тестовом или работающем сервере, и установите для $ state значение «local», «testing» или «live». Тогда:

if( $state == "local" || $state == "testing" )
{
 ini_set( "display_errors", "1" );
 error_reporting( E_ALL & ~E_NOTICE );
}
else
{
 error_reporting( 0 );
}
13 голосов
/ 21 марта 2014

PHP-сообщение об ошибке:

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
2 голосов
/ 30 июля 2012

Если по какой-то причине вы не можете получить доступ к файлу php.ini, отключите ошибки для stdout (display_errors) в файле .htaccess в любом каталоге, добавив следующую строку:

php_flag display_errors off

Кроме того, вы можете добавить журнал ошибок в файл:

php_flag log_errors on

2 голосов
/ 29 октября 2009

Вы можете установить тип сообщения об ошибке, который вам нужен, в php.ini или с помощью функции error_reporting () в верхней части вашего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...