Showing all errors and warnings [duplicate]
After restarting Apache, I still get no errors/warnings. UPDATE 1: I have changed error_reporting in php.ini from:
But the page will still not display errors/warnings of any kind. ORIGINAL QUESTION: The following script is generating a warning because the $err being inside the if statement. Why is this warning not being displayed on the PHP page in a web browser? I have to look at the Apache logs to see the warning. Also, if I deliberately change the «insert into» to «delete into», it does not display an error on the PHP page. Why are the errors not displaying on the actual PHP page?
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $STH = $DBH->prepare("delete into table1 (display_name, email, password) values ( :display_name, :email, :password )"); $STH->bindParam(':display_name', $_POST['display_name'], PDO::PARAM_STR, 100); $STH->bindParam(':email', $_POST['email'], PDO::PARAM_STR, 100); $STH->bindParam(':password', $_POST['password'], PDO::PARAM_STR, 100); $STH->execute(); $STH = $DBH->prepare("delete into table2 ( username, status, users_id ) values ( :username, :status, :users_id )"); $strStatus = 1; $STH->bindParam(':username', $_POST['display_name'], PDO::PARAM_STR, 100); $STH->bindParam(':status', $strStatus, PDO::PARAM_INT, 1); $STH->bindParam(':users_id', $_POST['referer'], PDO::PARAM_INT, 1); $STH->execute(); $DBH = null; > catch (PDOException $e) < echo $e->getMessage(); > header("Location: " . $_SERVER['PHP_SELF']); exit; > else < foreach ($_POST as $key =>$val) < $form[$key] = htmlspecialchars($val); >> > else < $form['display_name'] = $form['email'] = $form['password'] = ''; >?> ?> Register
Please re-read my question, we already know your error_reporting setting because it is in the script.
Please re-re-read my question. display_errors is entirely different from error_reporting . Also, your script overrides the error_reporting value set in the INI file.
6 Answers 6
Display errors could be turned off in the php.ini or your Apache configuration file.
You can turn it on in the script:
error_reporting(E_ALL); ini_set('display_errors', '1');
You should see the same messages in the PHP error log.
@oshirowanen ini_set() does not actually change the php.ini file, the script only «acts» like it is set like that in php.ini . From manual: Sets the value of the given configuration option. The configuration option will keep this new value during the script’s execution , and will be restored at the script’s ending .
@Charles Why would E_ALL remove E_NOTICE ? Doesn’t E_ALL by itself including everything, including E_NOTICE?
I was able to get all errors via the below code:
ini_set('display_startup_errors', 1); ini_set('display_errors', 1); error_reporting(-1);
error_reporting(-1); should not be used. It may not work on every system. Instead should be error_reporting(E_ALL);
error_reporting(-1) should work just fine as it is given as example here: php.net/manual/en/function.error-reporting.php
The values for ini_set should actually be strings, such as ini_set(‘display_errors’, ‘1’); as per documentation and this is enforced when using strict typing (eg, declare(strict_types=1); )
PHP errors can be displayed by any of below methods:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
Straight from the php.ini file:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Error handling and logging ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This directive informs PHP of which errors, warnings and notices you would like ; it to take action for. The recommended way of setting values for this ; directive is through the use of the error level constants and bitwise ; operators. The error level constants are below here for convenience as well as ; some common settings and their meanings. ; By default, PHP is set to take action on all errors, notices and warnings EXCEPT ; those related to E_NOTICE and E_STRICT, which together cover best practices and ; recommended coding standards in PHP. For performance reasons, this is the ; recommend error reporting setting. Your production server shouldn't be wasting ; resources complaining about best practices and coding standards. That's what ; development servers and development settings are for. ; Note: The php.ini-development file has this setting as E_ALL. This ; means it pretty much reports everything which is exactly what you want during ; development and early testing. ; ; Error Level Constants: ; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0) ; E_ERROR - fatal run-time errors ; E_RECOVERABLE_ERROR - almost fatal run-time errors ; E_WARNING - run-time warnings (non-fatal errors) ; E_PARSE - compile-time parse errors ; E_NOTICE - run-time notices (these are warnings which often result ; from a bug in your code, but it's possible that it was ; intentional (e.g., using an uninitialized variable and ; relying on the fact it is automatically initialized to an ; empty string) ; E_STRICT - run-time notices, enable to have PHP suggest changes ; to your code which will ensure the best interoperability ; and forward compatibility of your code ; E_CORE_ERROR - fatal errors that occur during PHP's initial startup ; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's ; initial startup ; E_COMPILE_ERROR - fatal compile-time errors ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) ; E_USER_ERROR - user-generated error message ; E_USER_WARNING - user-generated warning message ; E_USER_NOTICE - user-generated notice message ; E_DEPRECATED - warn about code that will not work in future versions ; of PHP ; E_USER_DEPRECATED - user-generated deprecation warnings ; ; Common Values: ; E_ALL (Show all errors, warnings and notices including coding standards.) ; E_ALL & ~E_NOTICE (Show all errors, except for notices) ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED ; Development Value: E_ALL ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT ; http://php.net/error-reporting error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
For pure development I go for:
error_reporting = E_ALL ^ E_NOTICE ^ E_WARNING
Also don’t forget to put display_errors to on
After that, restart your server for Apache on Ubuntu:
sudo /etc/init.d/apache2 restart
Предопределённые константы
Перечисленные ниже константы всегда доступны как часть ядра PHP.
Замечание: Данные имена констант можно использовать в файле php.ini но не вне PHP, как например в файле httpd.conf , где вместо них необходимо использовать значения их битовых масок.
Значение | Константа | Описание | Примечание |
---|---|---|---|
1 | E_ERROR ( int ) | Фатальные ошибки времени выполнения. Это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. Выполнение скрипта в таком случае прекращается. | |
2 | E_WARNING ( int ) | Предупреждения времени выполнения (не фатальные ошибки). Выполнение скрипта в таком случае не прекращается. | |
4 | E_PARSE ( int ) | Ошибки на этапе компиляции. Должны генерироваться только парсером. | |
8 | E_NOTICE ( int ) | Уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы. | |
16 | E_CORE_ERROR ( int ) | Фатальные ошибки, которые происходят во время запуска РНР. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются ядром PHP. | |
32 | E_CORE_WARNING ( int ) | Предупреждения (не фатальные ошибки), которые происходят во время начального запуска РНР. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются ядром PHP. | |
64 | E_COMPILE_ERROR ( int ) | Фатальные ошибки на этапе компиляции. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются скриптовым движком Zend. | |
128 | E_COMPILE_WARNING ( int ) | Предупреждения на этапе компиляции (не фатальные ошибки). Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются скриптовым движком Zend. | |
256 | E_USER_ERROR ( int ) | Сообщения об ошибках, сгенерированные пользователем. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() . | |
512 | E_USER_WARNING ( int ) | Предупреждения, сгенерированные пользователем. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() . | |
1024 | E_USER_NOTICE ( int ) | Уведомления, сгенерированные пользователем. Такие уведомления схожи с E_NOTICE , за исключением того, что они генерируются в коде скрипта, средствами функции PHP trigger_error() . | |
2048 | E_STRICT ( int ) | Включаются для того, чтобы PHP предлагал изменения в коде, которые обеспечат лучшее взаимодействие и совместимость кода. | |
4096 | E_RECOVERABLE_ERROR ( int ) | Фатальные ошибки с возможностью обработки. Такие ошибки указывают, что, вероятно, возникла опасная ситуация, но при этом, скриптовый движок остаётся в стабильном состоянии. Если такая ошибка не обрабатывается функцией, определённой пользователем для обработки ошибок (смотрите set_error_handler() ), выполнение приложения прерывается, как происходит при ошибках E_ERROR . | |
8192 | E_DEPRECATED ( int ) | Уведомления времени выполнения об использовании устаревших конструкций. Включаются для того, чтобы получать предупреждения о коде, который не будет работать в следующих версиях PHP. | |
16384 | E_USER_DEPRECATED ( int ) | Уведомления времени выполнения об использовании устаревших конструкций, сгенерированные пользователем. Такие уведомления схожи с E_DEPRECATED за исключением того, что они генерируются в коде скрипта, с помощью функции PHP trigger_error() . | |
32767 | E_ALL ( int ) | Все поддерживаемые ошибки, предупреждения и замечания. |
Представленные выше значения (как числовые, так и символьные) используются для задания битовой маски, определяющей об ошибках какого типа будет даваться отчёт. Вы можете использовать побитовые операторы, чтобы совмещать эти значения для указания определённых типов ошибок. Стоит отметить, что в php.ini допустимы только следующие операторы: ‘|’, ‘~’, ‘!’, ‘^’ и ‘&’.
Уровни ошибок РНР
За уровень обработки ошибок в PHP отвечает директива error_reporting конфигурационного файла php.ini . Данный параметр определяет типы ошибок, о которых PHP информирует выводом текстового сообщения в окно браузера.
Возможные значения директивы
Уровень ошибки | Константа | Описание ошибки |
---|---|---|
1 | E_ERROR | Ошибки обычных функций (критичные ошибки) |
2 | E_WARNING | Обычные предупреждения (не критичные ошибки) |
4 | E_PARSE | Ошибки синтаксического анализатора |
8 | E_NOTICE | Замечания (аномалии в коде, возможные источники ошибок — следует отключить при наличии русского текста в коде, так как для интернациональных кодировок не обеспечивается корректная работа). |
16 | E_CORE_ERROR | Ошибки обработчика |
32 | E_CORE_WARNING | Предупреждения обработчика |
64 | E_COMPILE_ERROR | Ошибки компилятора |
128 | E_COMPILE_WARNING | Предупреждения компилятора |
256 | E_USER_ERROR | Ошибки пользователей |
512 | E_USER_WARNING | Предупреждения пользователей |
1024 | E_USER_NOTICE | Уведомления пользователей |
E_ALL | Все ошибки |
Вышеуказанные значения (цифровые или символьные) используются для построения битовой маски, которая специфицирует выводимое сообщение об ошибке. Вы можете использовать битовые операции для маскирования определённых типов ошибок. Обратите внимание, что только ‘|’, ‘~’, ‘!’ и ‘\&’ будут понятны в php.ini и что никакие битовые операции не будут понятны в php3.ini.
В PHP 4 значением по умолчанию для error_reporting будет E_ALL & ~E_NOTICE , что означает отображение всех ошибок и предупреждений, которые не имеют уровень E_NOTICE-level. В PHP 3 значение по умолчанию — E_ERROR | E_WARNING | E_PARSE означает то же самое.
Заметьте, однако, что, поскольку константы не поддерживаются в PHP 3 в файле php3.ini, установка error_reporting должна выполняться цифрами; то есть 7 по умолчанию.
Настройка при помощи php.ini
Параметр error_reporting позволяет устанавливать несколько уровней, используя побитовые флаги. К примеру, уровень:
error_reporting = E_ALL & ~E_NOTICE
позволяет выводить все ошибки, за исключением замечаний.
А для того чтобы показывать только ошибки (исключая предупреждения и замечания), директива должна быть настроена так, как показано ниже:
error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
Настройка при помощи .htaccess
Включаем вывод ошибок в окно браузера и устанавливаем нужный уровень.
php_flag display_errors On
php_value error_reporting E_ALL
Настройка при помощи PHP
Включаем вывод ошибок в окно браузера и устанавливаем нужный уровень.