Here is a function which generates a debug report for display or email
using get_defined_vars. Great for getting a detailed snapshot without
relying on user input.
// Usage: generateDebugReport(method,get_defined_vars(),email[optional]);
// Where method is "browser" or "email".
// Create an ignore list for keys returned by 'get_defined_vars'.
// For example, HTTP_POST_VARS, HTTP_GET_VARS and others are
// redundant (same as _POST, _GET)
// Also include vars you want ignored for security reasons - i.e. PHPSESSID.$ignorelist=array("HTTP_POST_VARS","HTTP_GET_VARS","HTTP_COOKIE_VARS","HTTP_SERVER_VARS","HTTP_ENV_VARS","HTTP_SESSION_VARS","_ENV","PHPSESSID","SESS_DBUSER","SESS_DBPASS","HTTP_COOKIE");$timestamp=date("m/d/y h:m:s");$message="Debug report created$timestamp\n";// Get the last SQL error for good measure, where $link is the resource identifier
// for mysql_connect. Comment out or modify for your database or abstraction setup.global$link;$sql_error=mysql_error($link);
if($sql_error){$message.="\nMysql Messages:\n".mysql_error($link);
}// End MySQL
// Could use a recursive function here. You get the idea ;-)foreach($defined_varsas$key=>$val){
if(is_array($val) && !in_array($key,$ignorelist) &&count($val) >0){$message.="\n$keyarray (key=value):\n";
foreach($valas$subkey=>$subval){
if(!in_array($subkey,$ignorelist) && !is_array($subval)){$message.=$subkey." = ".$subval."\n";
}
elseif(!in_array($subkey,$ignorelist) &&is_array($subval)){
foreach($subvalas$subsubkey=>$subsubval){
if(!in_array($subsubkey,$ignorelist)){$message.=$subsubkey." = ".$subsubval."\n";
}
}
}
}
}
elseif(!is_array($val) && !in_array($key,$ignorelist) &&$val){$message.="\nVariable ".$key." = ".$val."\n";
}
}
if($method=="browser"){
echonl2br($message);
}
elseif($method=="email"){
if($email=="undefined"){$email=$_SERVER["SERVER_ADMIN"];
}$mresult=mail($email,"Debug Report for ".$_ENV["HOSTNAME"]."",$message);
if($mresult==1){
echo"Debug Report sent successfully.\n";
}
else{
echo"Failed to send Debug Report.\n";
}
}
}?>