summaryrefslogtreecommitdiffstats
path: root/system/codeigniter
diff options
context:
space:
mode:
authorDerek Jones <derek.jones@ellislab.com>2009-07-11 19:05:58 +0200
committerDerek Jones <derek.jones@ellislab.com>2009-07-11 19:05:58 +0200
commit817163a1bcff02285f763bcf72ff02e86f218cf8 (patch)
treeca429f1c3b2acc8d72e97e6269ca3cdb5598f95b /system/codeigniter
parent55acc8b4d980c43e4bde04f0e0b99a594dea28ff (diff)
Modified show_error() to allow sending of HTTP server response codes.
Added set_status_header() to the Common functions to allow use when the Output class is unavailable. Fixed a bug where the 400 status header sent with the 'disallowed URI characters' was not compatible with CGI environments.
Diffstat (limited to 'system/codeigniter')
-rw-r--r--system/codeigniter/Common.php89
1 files changed, 87 insertions, 2 deletions
diff --git a/system/codeigniter/Common.php b/system/codeigniter/Common.php
index c7f95688f..340be2454 100644
--- a/system/codeigniter/Common.php
+++ b/system/codeigniter/Common.php
@@ -203,10 +203,10 @@ function config_item($item)
* @access public
* @return void
*/
-function show_error($message)
+function show_error($message, $status_code = 500)
{
$error =& load_class('Exceptions');
- echo $error->show_error('An Error Was Encountered', $message);
+ echo $error->show_error('An Error Was Encountered', $message, 'error_general', $status_code);
exit;
}
@@ -252,6 +252,91 @@ function log_message($level = 'error', $message, $php_error = FALSE)
$LOG->write_log($level, $message, $php_error);
}
+
+/**
+ * Set HTTP Status Header
+ *
+ * @access public
+ * @param int the status code
+ * @param string
+ * @return void
+ */
+function set_status_header($code = 200, $text = '')
+{
+ $stati = array(
+ 200 => 'OK',
+ 201 => 'Created',
+ 202 => 'Accepted',
+ 203 => 'Non-Authoritative Information',
+ 204 => 'No Content',
+ 205 => 'Reset Content',
+ 206 => 'Partial Content',
+
+ 300 => 'Multiple Choices',
+ 301 => 'Moved Permanently',
+ 302 => 'Found',
+ 304 => 'Not Modified',
+ 305 => 'Use Proxy',
+ 307 => 'Temporary Redirect',
+
+ 400 => 'Bad Request',
+ 401 => 'Unauthorized',
+ 403 => 'Forbidden',
+ 404 => 'Not Found',
+ 405 => 'Method Not Allowed',
+ 406 => 'Not Acceptable',
+ 407 => 'Proxy Authentication Required',
+ 408 => 'Request Timeout',
+ 409 => 'Conflict',
+ 410 => 'Gone',
+ 411 => 'Length Required',
+ 412 => 'Precondition Failed',
+ 413 => 'Request Entity Too Large',
+ 414 => 'Request-URI Too Long',
+ 415 => 'Unsupported Media Type',
+ 416 => 'Requested Range Not Satisfiable',
+ 417 => 'Expectation Failed',
+
+ 500 => 'Internal Server Error',
+ 501 => 'Not Implemented',
+ 502 => 'Bad Gateway',
+ 503 => 'Service Unavailable',
+ 504 => 'Gateway Timeout',
+ 505 => 'HTTP Version Not Supported'
+ );
+
+ if ($code == '' OR ! is_numeric($code))
+ {
+ show_error('Status codes must be numeric', 500);
+ }
+
+ if (isset($stati[$code]) AND $text == '')
+ {
+ $text = $stati[$code];
+ }
+
+ if ($text == '')
+ {
+ show_error('No status text available. Please check your status code number or supply your own message text.', 500);
+ }
+
+ $server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : FALSE;
+
+ if (substr(php_sapi_name(), 0, 3) == 'cgi')
+ {
+ header("Status: {$code} {$text}", TRUE);
+ }
+ elseif ($server_protocol == 'HTTP/1.1' OR $server_protocol == 'HTTP/1.0')
+ {
+ header($server_protocol." {$code} {$text}", TRUE, $code);
+ }
+ else
+ {
+ header("HTTP/1.1 {$code} {$text}", TRUE, $code);
+ }
+}
+
+
/**
* Exception Handler
*