When an error occurs inside an Embperl page, Embperl will display an error page,
containing the error message. Sometimes you want to have a different behaviour. One possibility is to let
Apache display a custom error page (of course only when you run under mod_perl). To get this working you need to set the option optReturnError (262144)
in your httpd.conf in the EMBPERL_OPTIONS directive. With this option set, Embperl sends no output in case of an error.
It returns the error back to Apache or the calling program. When running
under mod_perl this gives you the chance to use the Apache ErrorDocument
directive to show a custom error-document. Inside the ErrorDocument
you can retrieve the error messages with $errors = $req_rec -> prev -> pnotes('EMBPERL_ERRORS') ; where $errors is a array reference. If you want to trap exceptions in a Embperl document, that you call via Execute,
you can do this by passing an array to Execute, which receives all error/warning
messages and/or all error objects. [-
Execute ({inputfile => 'foo.epl', errors => \@errors}) ;
-]
[$if @errors$]
The following errors had occurred:<br>
[$foreach $err (@errors)$]
[+ $err +]<br>
[$endforeach$]
[$endif$] In case you call die inside the executed page and pass an object (or a reference)
to die instead of a string this will also show up in @errors. The last object
passed to die is also available via $epreq - errobj>. $epreq - error> can be used to test if an error occurred so far during the
current request. You can also set $epreq - error> to false to reset Embperl's
internal error condition.
If the option optReturnError or an error array is passed to a component
the error flag is reset after the execution of component. If an error array is passed to a component, the errors inside the component are
not added to the overall
errors of the request and therefore will not cause Embperl to display an error page. An more seldom used option is optDisableEmbperlErrorPage (2), which tells
tells Embperl not to send its own errorpage in case of failure,
but instead show as much of the page as possible. Errors are only logged
to the log file.
|