My site is completely custom, as such I like to know when I have poorly written code. I use set_exception_handler and set_error_handler to use custom classes to log errors to a file. This includes notices and warnings.
Within my own code, this is fine as I get very few logs and those that I do get are things I actually want to fix.
However, i've just started using simplePie and because it's PHP4 compatible I get tons of notices, primarily for things like calling functions statically or passing things by reference incorrectly.
It's too much for me to go through and fix simplePie, if it wasn't I wouldn't be using it in the first place.
Is there a way that I can specifically ignore errors generated by a certain file or class? Here's an overview of what of my very basic exception handling looks like:
set_exception_handler("CustomExceptionHandler"); set_error_handler("customErrorHandler"); /** * CustomExceptionHandler() * * This is used if an exception is thrown that isn't caught. * * @param object $e The exception as an object */ function CustomExceptionHandler(Exception $e) { exitToError($e->getMessage()); } /** * customErrorHandler() * * This is called for any errors no matter what their level. */ function customErrorHandler($errno, $errstr, $errfile, $errline) { if(in_array($errno, array(E_USER_ERROR, E_RECOVERABLE_ERROR))) { throw new CustomErrorException($errstr, 0, $errno, $errfile, $errline); } else { CustomException::logError($errstr, $errno, $errfile, $errline); } return FALSE; } /** * class CustomErrorException * * Used by custom_error_handler() to convert all fatal * errors to exceptions. * * @see custom_error_handler() * @see http://www.php.net/manual/en/class.errorexception.php */ class CustomErrorException extends CustomException { /** * $severity * * The severity level of the exception * * @access protected * @var int */ protected $severity; /** * __construct() * * Constructs the new exception * * @access public * @param string $message The Exception message * @param int $code The Exception code * @param int $severity The severity level of the exception * @param string $filename The filename where the exception was thrown * @param int $lineno The line number where the exception was thrown */ public function __construct($message, $code = null, $severity = E_ERROR, $filename = null, $lineno= null) { $this->message = $message; $this->code = $code; $this->severity = (int)$severity; $this->file = $filename; $this->line = $lineno; self::logError($this->message,$this->code,$this->file,$this->line,$this->getTraceAsString()); } } /** * class CustomException * * Overwrites Exception to give us more control on how * exceptions are handled and logged. * * @see http://www.php.net/manual/en/language.exceptions.extending.php */ class CustomException extends Exception { /** * __construct * * We call the parent contruct as we still want it to do all its magic. We just want * overwrite this method so that we can log the error exactly how we want. */ public function __construct($message, $code = 0, Exception $previous = NULL) { parent::__construct($message, $code); self::logError($this->getMessage(),$this->getCode(),$this->getFile(),$this->getLine(),$this->getTraceAsString()); } /** * __toString() * * We overwrite this function so that we can use our stringBuilder function. */ public function __toString() { return self::stringBuilder($this->getMessage(),$this->getCode(),$this->getFile(),$this->getLine(),$this->getTraceAsString()); } /** * stringBuilder() * * We use this method so that we have a standard method of building error * strings that anything can tap into. * * @access public * @param string $message the exception message * @param int $code the code assigned to this exception * @param string $file the file where the exception occurred * @param int $line the line where the exception occurred * @param string $trace backtrace */ public function stringBuilder($message, $code, $file, $line, $trace='') { //return "[".date("d-M-Y H:i:s")."] ".$this->getMessage()." in ".$this->getFile().":".$this->getLine()."\nStack trace:\n".$this->getTraceAsString()."\n"; return "[".date("d-M-Y H:i:s")."] ".$message." in ".$file.":".$line."\n"; } /** * logError() * * We use a method so that we have a standard way of saving errors * to a log. * * We use XML because it's easy to parse. * * @access public * @param string $message the exception message * @param int $code the code assigned to this exception * @param string $file the file where the exception occurred * @param int $line the line where the exception occurred * @param string $trace backtrace * @todo We could improve it to write to the xml file using DomDocument * as laid out here http://www.xml-training-guide.com/append-delete-data-from-xml-using-php.html */ public function logError($message, $code, $file, $line, $trace='') { //Save it to a standard text file to guarentee saving the error file_put_contents(ROOT_URL.ERROR_LOG_TXT,self::stringBuilder($message, $code, $file, $line, $trace),FILE_APPEND); } }
and here is an example of two of the errors simplePie throws up:
[01-Aug-2010 00:50:33] Assigning the return value of new by reference is deprecated in ***\SimplePie.php:738 [01-Aug-2010 00:50:34] Non-static method SimplePie_Misc::parse_date() should not be called statically in ***\SimplePie.php:60