#50729 [Bgs]: Error Control Operator (@) Does Not Work With Custom Error Handler
| From: | degeberg@php.net | Date: | Tue, 12 Jan 2010 17:01:01 +0000 |
| Subject: | #50729 [Bgs]: Error Control Operator (@) Does Not Work With Custom Error Handler | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-146580@lists.php.net to get a copy of this message | ||
ID: 50729
Updated by: degeberg@php.net
Reported By: keithdavis at solidtechservice dot com
Status: Bogus
Bug Type: Scripting Engine problem
Operating System: Windows 7 64 Bit
PHP Version: 5.3.1
New Comment:
On my setup using PHP 5.3.1, this code:
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
var_dump(error_reporting());
}
set_error_handler('myErrorHandler', E_ALL);
var_dump(error_reporting());
@include 'does-not-exist.php';
var_dump(error_reporting());
?>
Produces the following output:
int(32767)
int(0)
int(0)
int(32767)
It is your own responsibility to check the error handling level inside
your custom error handler.
Previous Comments:
------------------------------------------------------------------------
[2010-01-12 15:17:50] keithdavis at solidtechservice dot com
The manual states
"Of particular note is that this value will be 0 if the statement that
caused the error was prepended by the @ error-control operator. "
This is NOT happening.
------------------------------------------------------------------------
[2010-01-12 15:15:27] keithdavis at solidtechservice dot com
But it's NOT setting the error reporting to 0. It is a bug, see this
reply to a bug done in 2002.
http://bugs.php.net/bug.php?id=16570&edit=2
When I use the @, it is supposed to pass an error level of 0, but it
does not do this. It still sets it to 1024 and does NOT set my reporting
level to 0.
------------------------------------------------------------------------
[2010-01-12 15:12:49] colder@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
@ temporarily sets error_reporting to 0, it doesn't prevent your
handler
to be called. You've to do the filtering in it based on error_reporting
if you want to.
------------------------------------------------------------------------
[2010-01-12 15:07:12] keithdavis at solidtechservice dot com
Description:
------------
The @ is supposed to set error level to 0 (at least, I think that is
what it supposed to do), but that does not work with a custom error
handler. I can reproduce this every time.
Reproduce code:
---------------
Set error handler:
set_error_handler('ErrorHandler');
Code to generate error:
$this->_bind = @ldap_bind($this->_conn,
$this->_ad_username.$this->_account_suffix, $this->_ad_password);
Error Handler Test:
function ErrorHandler($iErrorNum, $sErrorMsg, $sErrorFile,
$iErrorLineNum){
echo $iErrorNum;
}
Expected result:
----------------
No error message and an $iErroNum of 0.
Actual result:
--------------
error message:
WARNING [2] ldap_bind(): Unable to bind to server: Can't contact LDAP
server, Line: 140 in file
C:\inetpub\Intranet_Local\library\classes\adLDAP.php
$iErrorNum = 1024
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=50729&edit=1