REBOL [ Title: "CGI wrapper function for debugging" Date: 12-jul-2003 Version: 0.0.1 File: %cgi-debug.r Author: "Sunanda" Purpose: "Provides debugging info for scripts running as a CGI under a webserver" library: [ level: 'beginner platform: 'all type: [function tool] domain: [cgi web] tested-under: [win unix linux] support: none license: bsd see-also: none ] ] cgi-debug: func [target-code [block!] /silent /local cgi-debug-capture-error ip-address ][ ;; == Usage: ;; == cgi-debug [block of code] ;; ;; == With a bit of luck, wrapping this round a ;; == block of code will return a html page with ;; == the error details, if it goes wrong. ;; == ;; == That html may be appended to to html you've ;; == emitted prior to the failure, so it might ;; == look a mess. if error? cgi-debug-capture-error: try [do target-code 1] [ if not silent [ print "Content-type: text/html^/" print
print
print "

[system name] Error

" print

print form now/precise print "
Sorry, we've had an unexpected error" print ["
=====Error in script" system/options/script "=====
"] print
print


print [replace/all copy mold disarm cgi-debug-capture-error newline " "] print
print
] ip-address: none error? try [ip-address: to-tuple system/options/cgi/remote-addr] ;; now attempt to write it to the log file: ;; ---------------------------------------- error? try [ write/append/lines %cgi-debug.log join "cgi-debug error captured -- " [now/precise " ... " replace/all copy mold disarm cgi-debug-capture-error newline " " " ... " "ip-address: " ip-address ] ] ;;try ;; Now attempt to send an email report ;; ----------------------------------- error? try [ if not 127.0.0.1 = to-tuple system/options/cgi/remote-addr [set-net [--from-email-address-- --default-server--] send to-email "--to-email address--" join "cgi-debug: error -- " [newline mold disarm cgi-debug-capture-error newline "ip-address: " ip-address ] ] ;;if ] ;; error/try quit ] ;; if ] ;; cgi-debug function