Portrety Uliczne Nieznajomych - zobacz wyjątkową galerię portretów z warszawskich ulic
ZALOGUJ SIĘ
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
   
WYSZUKIWARKA I DZIAŁY
całe porady  tytuły
zaznacz działy do przeszukania
(brak wyboru = wszystkie działy)
PHP
MySQL >
PostgreSQL
SQLite
Perl
Java
XML
XSLT
XPath
WML
SVG
RegExp
Wyszukiwarki
Ochrona
VBScript
Google Plus
XHTML/CSS
JavaScript
Grafika
Flash
Photoshop
Windows
Linux
Bash
Apache
Procmail
E-biznes
Explorer
Opera
Firefox
Inne porady
   
KURSY, DOKUMENTACJE
Własne:
XHTML/CSS
JavaScript
ActionScript
WML, RSS, SSI
Pozostałe:
PHP
MySQL
Java API
więcej...
   
użytkowników online: 67
W CZYM MOGĘ POMÓC?


   
OPINIE UŻYTKOWNIKÓW
Uważam, że serwis jest najlepszy na świecie. Wykonany rzetelnie, a wszystkie skrypty sa dopracowane. Zamieszczony materiał godny mistrza. Jestem programistą od wielu lat i bez tego serwisu nie istnieje. Upraszacza życie każdemu programiście. Imponujący jest fakt, że do twórcy serwisu zawsze można się zwrócić z prośbą o pomoc i uzyskuje się ją w bardzo krótkim czasie. Najważniejsze w tym wszystkim jest to, że można korzystać z witryny za symboliczną opłatą.

Marcin Kowalski
Multinet Polska

   
GALERIA FOTOGRAFII
   
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net

[Spis] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [X] [W] [Z]

error_reporting

(PHP 3, PHP 4, PHP 5)

error_reporting -- Sets which PHP errors are reported

Opis

int error_reporting ( [int level] )

The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script.

error_reporting() sets PHP's error reporting level, and returns the old level. The level parameter takes on either a bitmask, or named constants. Using named constants is strongly encouraged to ensure compatibility for future versions. As error levels are added, the range of integers increases, so older integer-based error levels will not always behave as expected.

Przykład 1. error_reporting() examples

<?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 (bitwise 63 may be used in PHP 3)
error_reporting(E_ALL);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

The available error level constants are listed below. The actual meanings of these error levels are described in the predefined constants.

Tabela 1. error_reporting() level constants and bit values

valueconstant
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
2047 E_ALL
2048 E_STRICT

Ostrzeżenie

With PHP > 5.0.0 E_STRICT with value 2048 is available. E_ALL does NOT include error level E_STRICT. Most of E_STRICT errors are evaluated at the compile time thus such errors are not reported in the file where error_reporting is enhanced to include E_STRICT errors.

See also the display_errors directive and ini_set().




User Contributed Notes

nate at codetrail dot com
01-Dec-2005 05:42

If you also using set_error_handler to catch errors, trying to set the level of error reported by using error_reporting has no effect.  All errors will be caught by set_error_handler regardless of what you try to set using error_reporting.


DarkGool
19-Aug-2005 07:30

In phpinfo() error reporting level display like a bit (such as 4095)

Maybe it is a simply method to understand what a level set on your host
if you are not have access to php.ini file

<?
$bit
= ini_get('error_reporting');
while (
$bit > 0) {
   for(
$i = 0, $n = 0; $i <= $bit; $i = 1 * pow(2, $n), $n++) {
      
$end = $i;
   }
  
$res[] = $end;
  
$bit = $bit - $end;
}
?>

In $res you will have all constants of error reporting
$res[]=int(16) // E_CORE_ERROR
$res[]=int(8)    // E_NOTICE
...


fredrik at demomusic dot nu
23-Jul-2005 01:24

Remember that the error_reporting value is an integer, not a string ie "E_ALL & ~E_NOTICE".

This is very useful to remember when setting error_reporting levels in httpd.conf:

Use the table above or:
<?
ini_set
("error_reporting", E_YOUR_ERROR_LEVEL);
echo
ini_get("error_reporting");
?>

To get the appropriate integer for your error-level. Then use:

php_admin_value error_reporting YOUR_INT

in httpd.conf

I want to share this rather straightforward tip as it is rather annoying for new php users trying to understand why things are not working when the error-level is set to (int) "E_ALL" = 0...

Maybe the PHP-developers should make ie error_reporting("E_ALL"); output a E_NOTICE informative message about the mistake?


alex at modem-help dot com
24-Jun-2005 02:22

Centos4 (Apache/2.0.52, php-4.3.9)

Maintaining development + production sites side-by-side is  possible. Obviously, the production site wants all error-reporting display switched off, whilst the development site is the total reverse. Unfortunately, the php.ini file is global.

Using `ini_set("display_errors","1");' is not possible (ref: 12-Feb-2005 12:28 below) as any fatal errors in the script mean that it (and included scripts) never get acted upon (see php.net/manual/en/ref.errorfunc.php#ini.display-errors).

Unfortunately the suggestion from Fernando Piancastelli (ref: 13-Dec-2004 09:23) did not work for me either. The following *did* work, and allows parse-errors to be displayed on the development site:

php.ini:
error_reporting  =  ~E_ALL
display_errors = Off
display_startup_errors = Off

within an Apache Virtual Host in httpd.conf:
php_flag  display_errors        on
php_flag  display_startup_errors on
php_value error_reporting        2047

The above *should* be surrounded with `<IfModule mod_php4.c> ... </IfModule>' but that did not work either.


phpfanat at yandex dot ru
22-Feb-2005 06:03

If you get a weird mysql warnings like "Warning: mysql_query() [http://www.mysql.com/doc]: Your query requires a full tablescan...", don't look for error_reporting settings - it's set in php.ini.
You can turn it off with
ini_set("mysql.trace_mode","Off");
in your script

And, as of my opinion, it should be NOTICE, not WARNING level.


vdephily at bluemetrix dot com
22-Feb-2005 12:40

Note that E_NOTICE will warn you about uninitialized variables, but assigning a key/value pair counts as initialization, and will not trigger any error :
<?php
error_reporting
(E_ALL);

$foo = $bar; //notice : $bar uninitialized

$bar['foo'] = 'hello'; // no notice, although $bar itself has never been initialized (with "$bar = array()" for example)

$bar = array('foobar' => 'barfoo');
$foo = $bar['foobar'] // ok

$foo = $bar['nope'] // notice : no such index
?>


11-Feb-2005 06:55

Under jjuffermans' note, the editors posted the following:

"Instead of using @ to suppress errors if the file does not exist you should do a conditional include:

if (is_file("nosuchfile.php")) {
 include_once("nosuchfile.php");
}"

This is rather obvious, but has an even more obvious problem: is_file doesn't check on the include_path, which one assumes include_once is highly likely to be using.

While there are any number of kludgy workarounds which can be employed to overcome this problem, it's a structural problem in PHP and should be fixed. Preferably @ should only suppress a file not found error, but not any errors inside the included file if it is found, or failing that at the least is_file or file_exists should have the option to look on the include_path for the file.


Fernando Piancastelli
13-Dec-2004 10:23

The error_reporting() function won't be effective if your display_errors directive in php.ini is set to "Off", regardless of level reporting you set. I had to set

display_errors = On
error_reporting = ~E_ALL

to keep no error reporting as default, but be able to change error reporting level in my scripts.
I'm using PHP 4.3.9 and Apache 2.0.


dnirvine[at]gmail[dot]com
14-Nov-2004 09:21

<?php
# config.ini
# PHP error reporting. supported values are given below.
# 0 - Turn off all error reporting
# 1 - Running errors
# 2 - Running errors + notices
# 3 - All errors except notices and warnings
# 4 - All errors except notices
# 5 - All errors

php_error_reporting=4

# config.ini ends

Setting error_reporting in PHP files would be something like the code below, assuming the function getinivar() returns the variable value from the configuration file.

[
code]
// setting PHP error reporting
switch(getinivar('php_error_reporting')) {
case
0: error_reporting(0); break;
case
1: error_reporting(E_ERROR | E_WARNING | E_PARSE); break;
case
2: error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); break;
case
3: error_reporting(E_ALL ^ (E_NOTICE | E_WARNING)); break;
case
4: error_reporting(E_ALL ^ E_NOTICE); break;
case
5: error_reporting(E_ALL); break;
default:
  
error_reporting(E_ALL);
}
[/
code]
?>
I'll have to start using this from now on!  Be much easier than having error_reporting(0) and trying to switch to find errors.  Thanks.


ferozzahid [at] usa [dot] com
08-Sep-2004 01:31

To be enable to switch between error_reporting during development and release phases, one can define say 'php_error_reporting' in the main configuration file (ini like file: no PHP) for the application as:

# config.ini
# PHP error reporting. supported values are given below.
# 0 - Turn off all error reporting
# 1 - Running errors
# 2 - Running errors + notices
# 3 - All errors except notices and warnings
# 4 - All errors except notices
# 5 - All errors

php_error_reporting=4

# config.ini ends

Setting error_reporting in PHP files would be something like the code below, assuming the function getinivar() returns the variable value from the configuration file.

[code]
// setting PHP error reporting
switch(getinivar('php_error_reporting')) {
case 0: error_reporting(0); break;
case 1: error_reporting(E_ERROR | E_WARNING | E_PARSE); break;
case 2: error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); break;
case 3: error_reporting(E_ALL ^ (E_NOTICE | E_WARNING)); break;
case 4: error_reporting(E_ALL ^ E_NOTICE); break;
case 5: error_reporting(E_ALL); break;
default:
   error_reporting(E_ALL);
}
[/code]

Feroz Zahid.


simon at firepages dot com dot au
23-Nov-2003 10:04

I needed to get a string representation of the integer value returned by ini_get( 'error_reporting' ) ;& this is what I ended up with if its of any use ... It appears to work ok.

<?
$err
=array(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' ,2047 => 'E_ALL ');

function
foo( &$intval ){
  
$x=2047;
   while(
$x > 0 ){
       if(
$x < $intval ){
          
$intval = $intval - abs( $x ) ;
           return
abs( $x ) ;
       }
      
$x = ceil( $x / 2 ) ;
   }
}

function
bar( $intval ,$err ){
   while(
$intval > 0 ){
       if( isset(
$err[$intval] ) ){
          
$array[] = $err[$intval];
           break;
       }
      
$rets = foo( $intval ) ;
      
$array[] = $err[$rets];
   }
   return
$array ;
}

$intval = 2047 - (int)ini_get( 'error_reporting' ) ;
echo
'E_ALL & ~ ( ' .@implode( ' | ' , bar( $intval , $err ) ) . ' ) ';
?>


hughjonesd at yahoo dot co dot uk
04-Sep-2003 06:49

In response to peterdodge below: sometimes it's a good idea to throw errors, because they warn the developer (or user) that something is wrong. It might be better to throw an error, but to set up a good error handler in order to display a useful error page or message to the reader. If you're clever, you can even set up a stack of error handlers, and have errors "thrown" and "caught" at different points in your script.


peterdodge at liquidfirestudios.com
21-May-2003 09:33

Try to avoid the use of E_USER_* errors when you can, as the script can better handle bad input better with conditional branching:

# e.g. user entered "foo"

$bad_data = "foo";

if ($input == $bad_data)
{
   myErrorHandler("Gave bad data $input");
}
else
{
   processData($input);
}

Also, as a programming practice try to use E_NOTICE whenever possible to catch undefined variables.


jernberg at fairytale dot se
27-Feb-2003 12:27

tip: if you want your error_reporting()-setting to work with your own error handler you could simply check the error number against the current error bitmask.

function myErrorHandler( $errno, $errstr, $errfile, $errline )
{
  $replevel = error_reporting();
  if( ( $errno & $replevel ) != $errno )
  {
   // we shall remain quiet.
   return;
  }
  echo( "error....." );
}


ronald at segment dot info
11-Feb-2003 05:09

Function translateErrorReportingConstant2String()
{
 $current = error_reporting();
 $out = "";

  if (($current & E_ERROR          ) == E_ERROR          ){ $out .=" E_ERROR          | "; }
  if (($current & E_WARNING        ) == E_WARNING        ){ $out .=" E_WARNING        | "; }
  if (($current & E_PARSE          ) == E_PARSE          ){ $out .=" E_PARSE          | "; }
  if (($current & E_NOTICE        ) == E_NOTICE        ){ $out .=" E_NOTICE          | "; }
  if (($current & E_CORE_ERROR    ) == E_CORE_ERROR    ){ $out .=" E_CORE_ERROR      | "; }
  if (($current & E_CORE_WARNING  ) == E_CORE_WARNING  ){ $out .=" E_CORE_WARNING    | "; }
  if (($current & E_COMPILE_ERROR  ) == E_COMPILE_ERROR  ){ $out .=" E_COMPILE_ERROR  | "; }
  if (($current & E_COMPILE_WARNING) == E_COMPILE_WARNING){ $out .=" E_COMPILE_WARNING | "; }
  if (($current & E_USER_ERROR    ) == E_USER_ERROR    ){ $out .=" E_USER_ERROR      | "; }
  if (($current & E_USER_WARNING  ) == E_USER_WARNING  ){ $out .=" E_USER_WARNING    | "; }
  if (($current & E_USER_NOTICE    ) == E_USER_NOTICE    ){ $out .=" E_USER_NOTICE    | "; }
  if (($current & E_ALL            ) == E_ALL            ){ $out .=" E_ALL            | "; }
 return $out;
 }
}


jjuffermans at chello dot com
05-Jan-2003 03:47

[Editor's Note]
Instead of using @ to suppress errors if the file does not exist you should do a conditional include:

if (is_file("nosuchfile.php")) {
 include_once("nosuchfile.php");
}


Note that when you use the @ to suppress the error of an include file that couldn'd be found, like so:

  @include("nosuchfile.php");

It also suppresses all the parse errors generated in "nosuchfile.php" if it does exist.

It took us a long time before we discovered why we weren't  getting any parse errors... This is it.

Personally, I don't like this... Maybe it can be changed in a future php version? :)

Coditor


sreid at sea-to-sky dot net
18-Nov-2002 10:16

It seems that using E_NOTICE (included with E_ALL) is the only way to get warnings about undefined variables. For example, if you type $soemthing when you mean $something, you may not get any message about it unless you use E_NOTICE level reporting.

The problem is, at that level of reporting you also get notices about array indexes that have not been set. This means lots of warnings when using $_GET['formvariable'] and such. You can check isset($_GET['formvariable']) first, but that gets annoying, especially when it is redundant to stricter input validation you need to do anyway.

The only solution I have found is to use set_error_handler() to register a custom error reporting function to report everything except where the error string starts with "Undefined index:". Then I call error_reporting(E_ALL). This seems to be the best compromise.

function error_handler($errno, $errstr, $errfile, $errline, $errctx) {
   if ($errno == E_NOTICE && substr($errstr, 0, 17) == "Undefined index: ") return;
   echo "\nerror_handler:\n\terrno=$errno\n\terrstr=$errstr\n";
   echo "\terrfile=$errfile\n\terrline=$errline\n";
   if ($errno & (E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR)) die();
}
set_error_handler("error_handler");
error_reporting(E_ALL);


rbt at zort.ca
10-Feb-2002 05:25

It should be noted that in apache.conf files the defined values (constants) don't work.  For E_ALL logging, one would use:

php_admin_value error_reporting 2047


25-Mar-2001 07:32

It seems that parse errors will be handled internally even if you've designated your own error handler; that is, your error-handling function will /not/ be called on a parse error.


cgi at harrison dot org
12-Dec-2000 12:59

[Editor's Note: The error suppression operator (@)can be used to suppress errors for a single expression. To use the operator, place it in front of the expression that you wish to suppress error reporting for. Basic use is:

$fp = @ fopen ('non-existant.file', 'r');

 See the url below for details.]

Error Suppression Operator - Info
http://www.php.net/manual/language.operators.errorcontrol.php


j dot schriver at vindiou dot com
03-Oct-2000 08:37

error_reporting() has no effect if you have defined your own error handler with set_error_handler()

[Editor's Note: This is not quite accurate.

E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING error levels will be handled as per the error_reporting settings.

All other levels of errors will be passed to the custom error handler defined by set_error_handler().

Zeev Suraski suggests that a simple way to use the defined levels of error reporting with your custom error handlers is to add the following line to the top of your error handling function:

if (!($type & error_reporting())) return;

 -zak@php.net]


durchholz at sourceforge dot net
25-Aug-2000 12:13

Here's how to temporarily lower the error reporting level:

$old_error_reporting = error_reporting(E_ALL & ~(E_WARNING | E_NOTICE | ...));
... do whatever you want to do in less verbose mode
error_reporting($old_error_reporting);


03-Feb-2000 08:31

The E_NOTICE error reporting level reports the use of undefined variables as an error.

For example:
error_level (E_ALL); # Set error reporting to highest level
if ($foo)            # This will generate an error
  print "bar";      # because $foo is not defined

To avoid this behavior, use isset to test if the given
variable has been defined.

For example:
error_level (E_ALL);
if (isset ($foo))
   print "bar";


webmaster at l-i-e dot com
21-May-1999 11:13

[Editor's Note: E_ALL will contain the result of OR'ing all of the applicable error constants together. For PHP 3, this will be the first 4 E_xxx constants.  For PHP 4, this will be all constants. ]

There is also an E_ALL which is the first 4 E_xxx added up for you...


 

 
  © 1996-2012 & Reporter.plmiejscao serwisieabonamentwarunki korzystaniaRSSkontakt