ID:               24214
 User updated by:  gk at proliberty dot com
 Reported By:      gk at proliberty dot com
 Status:           Open
 Bug Type:         Feature/Change Request
 Operating System: linux ; kernel 2.4.18
 PHP Version:      4.3.2
 New Comment:

I forgot to point out why the phpc_trigger_error() example is not an
adequate workaround for the lack of consistency in debug_backtrace().

Although I use __LINE__ and __FILE__ when $debug_backtrace[0] is not
set, these values are pretty useless since they are set from the
context of the phpc_trigger_error function, NOT from the place where it
was called from; where the error occured. If debug_backtrace() always
returned __LINE__ and __FILE__ we would have everything we need.


Previous Comments:
------------------------------------------------------------------------

[2003-06-17 13:30:07] gk at proliberty dot com

Yes, below is an example of how I'm using it. 
The purpose is to work around the limited arguments passed to custom
error handlers, installed with set_error_handler(), which do not
receive class and function information. 

The following function replaces trigger_error() by talking directly to
my custom error handler ('phpc_error_handler', omitted for brevity
below), using debug_backtrace() to pass class and function info for
prepending to error messages.

<?php
///////////////////////////////////////////////////////
/*
  phpc_trigger_error( $errorMessage,$errorCode,$debugBacktrace=NULL )
    same as PHP built-in trigger_error, with optional parameter
    generate error message including debugging information
    
  USAGE:
  phpc_trigger_error( $errorMessage,$errorCode,debug_backtrace() );
*/
/////////////////////////////////////////////////////////
function phpc_trigger_error(
$errorMessage,$errorCode,$debug_backtrace=NULL ){ 

        $errfile=__FILE__;
        $errline=__LINE__;
        $errclass="";
        $errfunction="";
        if (isset($debug_backtrace[0])){
                $errfile=$debug_backtrace[0]['file'];
                $errline=$debug_backtrace[0]['line'];
                $errclass=$debug_backtrace[0]['class'];
                $errfunction=$debug_backtrace[0]['function'];
        }
        if (!empty($errclass)) $errclass.='::';
        if (!empty($errfunction)) $errfunction.='(): ';
    $errorMessage=$errclass.$errfunction.$errorMessage.' ';
    phpc_error_handler ($errorCode,$errorMessage,$errfile,$errline);
} // phpc_trigger_error()
?>

------------------------------------------------------------------------

[2003-06-17 11:40:34] [EMAIL PROTECTED]

Can you show an example where this could somehow be useful?
(you can always use __FILE__ and __LINE__ :)


------------------------------------------------------------------------

[2003-06-16 19:33:06] gk at proliberty dot com

Description:
------------
debug_backtrace() should behave consistently in order to be useful in
all contexts: inside classes, functions and from top level of script
file.

However, when exectuted from top level, it returns an empty array.

According to the documentation, it should return an array with minimal
info including __LINE__, __FILE__
>debug_backtrace() generates a PHP backtrace and returns this
information as an associative array. The possible returned elements are
listed in the following table: 
...
line integer The current line number. See also __LINE__.  
file string The current file name. See also __FILE__.  



Reproduce code:
---------------
<?php print_r(debug_backtrace()); ?>

Expected result:
----------------
[EMAIL PROTECTED] xobj]$ php /tmp/a.php
array(1) {
    [0]=>
    array(4) {
        ["file"] => string(10) "/tmp/a.php"
        ["line"] => int(1)
        ["function"] =>
        ["args"]=>
    }
}



Actual result:
--------------
[EMAIL PROTECTED] xobj]$ php /tmp/a.php
Array
(
)



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=24214&edit=1

Reply via email to