¤  tinycrud project site > /lib/classes/ErrorHandler.php
<?
require_once $_SERVER['DOCUMENT_ROOT'] ."/lib/classes/XSLT.php";
ob_start();
if (!
defined("DEV")) {
  if (
eregi("^dev\."getenv("HTTP_HOST"))) { 
    
define("DEV"true);
  } else {
    
define("DEV"false);
  }
}

if (!
defined("GOD")) {
  if (
eregi("192\.168\.100\.|127\.0\.0\.1"getenv("REMOTE_ADDR"))) {
    
define("GOD"'1');    
  } else {
    
define("GOD"'0');    
  }
}

$_the_handler = new ErrorHandler();
set_error_handler(array($_the_handler'handleError'));
set_exception_handler(array($_the_handler'handleException'));

class 
FormFieldException extends Exception {} //-= For server side sanity checker

class ErrorHandler {
  
  function 
handleException($exception) {
    if (
DEV GOD) {
      
//-= Clear buffer, dump your guts....
      
ob_get_clean();
      
ob_start();
      echo 
"file: "$exception->getFile() ." \n";
      echo 
"line: "$exception->getLine() ." \n";
      
$exception->getMessage() ."\n";
      
debug_print_backtrace();
      
phpinfo(INFO_VARIABLES);
      
$page ob_get_clean();
      
#mail("you@mail.com", "php error", $page, "Content-Type: text/html; charset=utf8"); 
      
echo $page;
    } else {
      
ob_get_clean();
      
ob_start();
      
//-= TODO use instanceof to decide whether or not to pass through the exeption in a pretty way... 
      
if ($exception instanceof FormFieldException) {
        
$xslt = new XSLT();
        
header("Content-type: text/html; charset=UTF-8");
        
$xslt->setXSL($_SERVER['DOCUMENT_ROOT'] .'/xsl/form-exception.xsl');
        
$xslt->setXML("<error code=\"\">"$exception->getMessage() ."</error>");
        echo 
$xslt->transform();
        exit;
      } else {
        
header("HTTP/1.1 500 Internal Error");
        
$xslt = new XSLT();
        
header("Content-type: text/html; charset=UTF-8");
        
$xslt->setXSL($_SERVER['DOCUMENT_ROOT'] .'/xsl/500.xsl');
        
$xslt->setXML("<error/>");
        echo 
$xslt->transform();
        
$page ob_get_clean();
        echo 
$page;
        
ob_start();
        echo 
"file: "$exception->getFile() ." \n";
        echo 
"line: "$exception->getLine() ." \n";
        
$exception->getMessage() ."\n";
        
debug_print_backtrace();
        
phpinfo(INFO_VARIABLES);
        
$page ob_get_clean();
        
#mail("you@mail.com", "php error 500", $page, "Content-Type: text/html; charset=utf8"); 
        
exit;
      }
    }
  }

  function 
handleError($errno$errstr$errfile$errline) {
    if (
$errno E_NOTICE) return;
    if (
DEV GOD) {
      
//-= Clear buffer, dump your guts....
      
ob_get_clean();
      
ob_start();
      echo 
"file: $errfile \n";
      echo 
"line: $errline \n";
      echo 
"$errstr\n";
      
debug_print_backtrace();
      
phpinfo(INFO_VARIABLES);
      
$page ob_get_clean();
      
#mail("you@mail.com", "php error", $page, "Content-Type: text/html; charset=utf8"); 
      
echo $page;
      exit;
    } else {
      
ob_get_clean();
      
ob_start();
      
header("HTTP/1.1 500 Internal Error");
      
$xslt = new XSLT();
      
header("Content-type: text/html; charset=UTF-8");
      
$xslt->setXSL($_SERVER['DOCUMENT_ROOT'] .'/xsl/500.xsl');
      
$xslt->setXML("<error/>");
      echo 
$xslt->transform();
      
$page ob_get_clean();
      echo 
$page;
      
ob_start();
      echo 
"file: $errfile \n";
      echo 
"line: $errline \n";
      echo 
"$errstr\n";
      
debug_print_backtrace();
      
phpinfo(INFO_VARIABLES);
      
$page ob_get_clean();
      
#mail("you@mail.com", "S4S error 500", $page, "Content-Type: text/html; charset=utf8"); 
      
exit;
    }
  }
}

if (
basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
  echo 
"!!!";
  try {
    echo 
1/0;
  } catch (
Exception $e) {

  }
}
?>