<!--- Kill extra output. ---> <cfsilent> <!--- Check to see if the error object exists. Even though we have landed on this page, it is possible that someone called it directly without throwing an erorr. The error object only exists if an error was caught. ---> <cfif StructKeyExists( VARIABLES, "Error" )> <!--- Mail out the error data (and whatever other scopes you would like to see at the time of th error). When you CFDump out the objects, make them Secure AND also be sure to use a TOP attribute when appropriate so that the CFDump doesn't recurse forever. ---> <cfmail to="ben@xxxxxxxxxx.com" from="web-errors@xxxxxxxxxx.com" subject="Web Site Error" type="html"> <p> An error occurred at #DateFormat( Now(), "mmm d, yyyy" )# at #TimeFormat( Now(), "hh:mm TT" )# </p> <h3> Error </h3> <cfdump var="#MakeStructSecure( VARIABLES.Error )#" label="Error object." /> <h3> CGI </h3> <cfdump var="#MakeStructSecure( CGI )#" label="CGI object" /> <h3> REQUEST </h3> <cfdump var="#MakeStructSecure( REQUEST )#" label="REQUEST object" top="5" /> <h3> FORM </h3> <cfdump var="#MakeStructSecure( FORM )#" label="FORM object" top="5" /> <h3> URL </h3> <cfdump var="#MakeStructSecure( URL )#" label="URL object" top="5" /> <h3> SESSION </h3> <cfdump var="#MakeStructSecure( SESSION )#" label="SESSION object" top="5" /> </cfmail> </cfif> <!--- When setting the header information, be sure to put it in a CFTry / CFCatch. We can only send header information if the site has NOT already been flushed to the browser. Also set a flag so that we know if information has been committed. ---> <cfset REQUEST.RequestCommitted = false /> <cftry> <!--- Set the status code to internal server error. ---> <cfheader statuscode="500" statustext="Internal Server Error" /> <!--- Set the content type. ---> <cfcontent type="text/html" reset="true" /> <!--- Catch any errors. ---> <cfcatch> <!--- There was an error so flag the request as already being committed. ---> <cfset REQUEST.RequestCommitted = true /> </cfcatch> </cftry> </cfsilent> <!--- Check to see if the request has been committed. If it has, then it means that content has already been committed to the browser. In that case, we are gonna want to refresh the screen, unless we came from a refresh, in which case just let the page run. ---> <cfif ( StructKeyExists( VARIABLES, "Error" ) AND REQUEST.RequestCommitted AND (NOT StructKeyExists( URL, "norefresh" )) )> <script type="text/javascript"> window.location.href = "cferror.cfm?norefresh=true"; </script> <!--- Exit out of the template. ---> <cfexit /> </cfif> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>An Error Occurred</title> </head> <body> <h1> Internal Server Error </h1> <p> An internal server error has occurred, but our squad of CF Ninjas are looking into it! Naturally, you won't be able to tell that they're doing anything because they are Ninjas! But, rest assured, stuff is getting done. </p> </body> </html>