ID: 50729
Updated by: [email protected]
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] [email protected]
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