Выключить предупреждения и ошибки на php/mysql
Я получаю ожидаемые уведомления и предупреждения и хотел бы отключить их в своем php файле. ошибки:
Warning: fsockopen()
и уведомления:
Notice: A non well formed numeric value encountered in
Я планирую использовать cron для этого php script и не хочу, чтобы какие-либо ошибки или уведомления регистрировались в любом месте.
Ответы
Ответ 1
Когда вы уверены, что ваш script отлично работает, вы можете избавиться от предупреждения и уведомлений вроде этого: поместите эту строку в начало вашего PHP скрипт:
error_reporting(E_ERROR);
До этого, работая над script, я бы посоветовал правильно отладить ваш script, чтобы все уведомления или предупреждения исчезали один за другим.
Поэтому вы должны сначала установить его как можно более подробно:
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>
Ответ 2
Подготовить функции с символом "@" для подавления определенных ошибок, в отличие от отключения всех отчетов об ошибках.
Дополнительная информация: http://php.net/manual/en/language.operators.errorcontrol.php
PHP поддерживает один оператор управления ошибкой: знак at (@). При добавлении выражения в PHP любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться.
@fsockopen();
Ответ 3
Всегда показывать ошибки на сервере тестирования. Никогда не показывайте ошибки на рабочем сервере.
Напишите script, чтобы определить, находится ли страница на локальном, тестирующем или живом сервере, и установите $state в "local", "testing" или "live". Тогда:
if( $state == "local" || $state == "testing" )
{
ini_set( "display_errors", "1" );
error_reporting( E_ALL & ~E_NOTICE );
}
else
{
error_reporting( 0 );
}
Ответ 4
PHP error_reporting reference:
// 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);
Ответ 5
вы можете установить тип сообщения об ошибках в php.ini или с помощью функции error_reporting() поверх script.
Ответ 6
Если вы не можете добраться до файла php.ini по какой-либо причине, отключите ошибки в stdout (display_errors
) в файле .htaccess в любом каталоге, добавив следующую строку:
php_flag display_errors off
Кроме того, вы можете добавить журнал ошибок в файл:
php_flag log_errors on