php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #50729 Error Control Operator (@) Does Not Work With Custom Error Handler
Submitted: 2010-01-12 15:07 UTC Modified: 2010-01-12 18:27 UTC
From: keithdavis at solidtechservice dot com Assigned:
Status: Not a bug Package: Scripting Engine problem
PHP Version: 5.3.1 OS: Windows 7 64 Bit
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: keithdavis at solidtechservice dot com
New email:
PHP Version: OS:

 

 [2010-01-12 15:07 UTC] 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

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-01-12 15:12 UTC] 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:15 UTC] 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:17 UTC] 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 17:01 UTC] degeberg@php.net
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.
 [2010-01-12 18:11 UTC] keithdavis at solidtechservice dot com
That makes no sense. How am I to determine in my error handler that the error control operator is being used?
 [2010-01-12 18:19 UTC] rasmus@php.net
Just check it:

if(error_reporting()==0) ...

I'm confused about your confusion here.
 [2010-01-12 18:27 UTC] keithdavis at solidtechservice dot com
Ok, I get it now, but I feel like the manual is very unclear on this subject. I posted this problem in Experts Exchange and we couldn't figure it out there either. 

It reads to me that the "ERROR LEVEL" or error number is being set to 0, not the "ERROR REPORTING LEVEL".

Thanks for your help.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Mon Apr 14 20:01:27 2025 UTC