2009-10-29 2 views
49

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

Warning: fsockopen() 

и уведомления являются:

Notice: A non well formed numeric value encountered in 

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

+4

Если вы не хотите, чтобы ошибки, отправленные вам по электронной почте cron, вы можете указать свой вывод на '/ dev/null'. Тем не менее, ошибки, как правило, существуют по какой-то причине - вы, вероятно, хотели бы знать, когда ваш скрипт cron ломается! Попробуйте обработать ошибки изящно. – ceejayoz

+0

Где-то связано: http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante

ответ

137

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

error_reporting(E_ERROR); 

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

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

UPDATE: как регистрировать ошибки вместо того, чтобы показывать их Как было отмечено в комментариях, то лучшим решением будет регистрировать ошибки, так только в файл Разработчик 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> 
+6

Не делайте этого. Подавление всех ошибок - ужасная идея. – ceejayoz

+31

вы говорите так, будто читаете мантру. В этом конкретном случае использования именно это и хочет пользователь. Если бы он попросил систему регистрации, он попросил бы об этом. – pixeline

+4

Я согласен с ceejayoz и pixeline. Однако error_reporting (0) следует устанавливать только в качестве меры безопасности в производственных средах, поэтому критическая информация не ошибочно просачивается злоумышленникам. Использование error_reporting (0) для «игнорирования ошибок» несет высокий риск привести к плохим вещам. Я знаю, о чем просил автор, но я бы предложил против этого. –

2

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

18

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

Дополнительная информация: http://php.net/manual/en/language.operators.errorcontrol.php

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

@fsockopen();

+0

это, как правило, лучшее решение для кода в производстве, IMHO – billrichards

+1

Возможно, «* возможно *», для одной функции, однако, заполняя ваши сценарии, это вызывает проблемы позже, когда * что-то не работает и ваш журнал ошибок пусто. Лучший способ - установить случай/переключатель, чтобы можно было быстро и быстро включить и выключить «отображение» ошибок. Затем на концерте они отключены, dev/test может быть включен. В любом случае, запись в файл журнала ошибок (почти) всегда рекомендуется – James

14

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

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

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

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

php_flag display_errors off

дополнительно можно добавить протоколирования ошибок в файл:

php_flag log_errors on

13

PHP ссылка error_reporting:

// 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); 
+0

, отчеты об ошибках будут отключены, но его отчеты будут храниться в файле журнала в папке. как остановить php для создания файлов журналов? tnx –

+0

@MehdiJ: остановить PHP от ошибок регистрации в ** error_log ** добавить этот код 'ini_set ('log_errors', 'off');' –

Смежные вопросы