Conteg v0.13 - Content Negotiation + Cache-Control for PHP-originated Web Output.
Custom Error Pages
------------------
With the appropriate switches, Conteg will auto-send the correct:
* 304 Not Modified
* 406 Not Acceptable
* 412 Precondition Failed
* 416 Requested Range Not Satisfiable
* 206 Partial content, or
* 200 OK page
+ full headers
A website may also want to take account of other error situations, requiring:
* 404 Not Found : content that no longer exists
* 410 Gone : ditto, HTTP/1.1 only
* 403 Forbidden : content that is refused
* 500 Internal Server Error : generic Server Error
* 503 Service Unavailable : service refused, server unavailable
(and so on - see sendStatusHeader() for a full list)
This short help file is to give a brief introduction to the production of such error pages,
including some pseudo-PHP to indicate typical coding.
Custom 404 pages were introduced in Conteg at v0.12.1, and are extended with v0.13. It is now
possible to:
* declare any arbitrary HTTP Status (no checking!)
* declare `404 Not Found'
- by default, transformed to `410 Gone' when HTTP/1.1
- will over-ride any other HTTP Status
By default, all (MS-only affected) error pages are auto-fixed to avoid the infamous
MSIE `friendly` error pages.
As with all other parameters, all setup() defaults may be over-ridden.
These are the relevant instantiation/setup() parameter defaults:
$_Instance = new Conteg( array(
'404' => FALSE, // higher precedence than 'http_status'
'404_to_410' => TRUE, // see sendStatusHeader()
'http_status' => NULL, // preferred to program-decided status
'msie_error_fix' => TRUE, // avoid MSIE `friendly` error pages
'noprint' => FALSE
));
Implementation Overview
-----------------------
Because this is a non-simple usage of Conteg, it will need to be declared early (possibly within
an auto-prepend file) with the `'noprint' => TRUE' switch. Then, at any point within the program
flow at which an error has been caught, setup() and show() are used, and the program exited.
The following pseudo-PHP will assume that an $error array is used to store Status and output.
<?php
ob_start(); // Conteg requirement
error_reporting( E_ALL ); // this is a test file
include( 'Conteg.include' );
$error = array(); // to store and signal error info
$param = array(
'noprint' => FALSE
)
$_Instance = new Conteg( $param );
...
(normal program flow)
...
// error check
if( <critical-error-check> ) {
$error[ 'critical' ] = TRUE;
$error[ 'status' ] = 403;
$error[ 'text' ] = "<html><body><p><b>Buzz Off</b><br />\n".
'A bit of text to explain why.</p></body></html>';
}
...
(other program flow until ready to check all errors)
...
// bail out on critical errors
if( !empty( $error[ 'critical' ])) {
ob_end_clean(); // discard previous output
echo $error[ 'text' ];
$param = array(
'cache_control' => array( 'macro' => 'cache-none' ),
'http_status' => $error[ 'status' ]
);
$_Instance->setup( $param );
$_Instance->show();
// any prog cleanup or processing goes here
// careful not to cause any more output
exit;
}
...
(normal program flow)
...
?>
Some references
---------------
* MSIE `friendly' Error Pages: http://support.microsoft.com/kb/218155
* : http://support.microsoft.com/kb/294807
* HTTP/1.1: : http://www.w3.org/Protocols/rfc2616/rfc2616.html
* HTTP/1.0: : http://www.w3.org/Protocols/rfc1945/rfc1945.txt
* v0.13 release announcement : http://forums.modem-help.com/viewtopic.php?t=670
* v0.12.3 : http://forums.modem-help.com/viewtopic.php?t=603
* v0.12.2 : http://forums.modem-help.com/viewtopic.php?t=581
* v0.12.1 : http://forums.modem-help.com/viewtopic.php?t=568
* v0.10 : http://forums.modem-help.com/viewtopic.php?t=128
(c) Alex Kemp 28 February, 2007
website: http://www.modem-help.com/
(email address with-held due to historical/hysterical problems)
(contact instead via PM at http://forums.modem-help.com/)
|