phpdebuggingoverridingnowdoc

PHP - recognize when the function was called


I'm thinking about how to find from where any function was called. The problem is that I need to find where the PHP is calling mail() function. One way will be to use register_tick_function(), but I'll need to open each file and check what is on each line. The project is huge, it will take really long to parse each file in PHP. Any other way? Or option how to override the mail() function?


Solution

  • To override the built-in mail function, take a look at override_function which is part of the Advanced PHP Debugger PECL extension - then you can use debug_backtrace to find out the caller details...

    //define code to override mail function (note I've used php5.3 nowdoc syntax to avoid 
    //the need to escape the dollar symbols!!
    $code=<<<'CODE'
        $trace=debug_backtrace();
        $caller=array_shift($trace);
    
        echo 'mail() called by '.$caller['function']
        if (isset($caller['class']))
            echo 'in '.$caller['class'];
    CODE;
    
    //install override
    override_function('mail', '$to,$subject,$msg,$hdrs,$params', $code);