HttpStatus: Implement header() method
authorTimo Tijhof <krinklemail@gmail.com>
Sun, 24 May 2015 12:05:13 +0000 (14:05 +0200)
committerBryanDavis <bdavis@wikimedia.org>
Thu, 4 Jun 2015 02:15:39 +0000 (02:15 +0000)
Standardise this. Currently MediaWiki does this in many different ways.

> WebResponse->header( "HTTP/1.0 $code $message" );
> WebResponse->header( "HTTP/1.1 $code $message" );
> WebResponse->header( "HTTP/1.x $code $message" );
> WebResponse->header( "HTTP/1.1 $code " . HttpStatus::getMessage( $code ) );
> WebResponse->header( "HTTP/1.1 $code $message", true, $code );
> header( "Status: $code $message", true, $code );

Change-Id: I1551e89808a1a67310549ec8d9fcb387754c9169

includes/libs/HttpStatus.php

index 809bfdf..442298a 100644 (file)
 class HttpStatus {
 
        /**
-        * Get the message associated with HTTP response code $code
+        * Get the message associated with an HTTP response status code
         *
-        * @param $code Integer: status code
-        * @return String or null: message or null if $code is not in the list of
-        *         messages
+        * @param int $code Status code
+        * @return string|null Message, or null if $code is not known
         */
        public static function getMessage( $code ) {
                static $statusMessage = array(
@@ -88,4 +87,25 @@ class HttpStatus {
                return isset( $statusMessage[$code] ) ? $statusMessage[$code] : null;
        }
 
+       /**
+        * Output an HTTP status code header
+        *
+        * @since 1.26
+        * @param int $code Status code
+        */
+       public static function header( $code ) {
+               static $version = null;
+               $message = self::getMessage( $code );
+               if ( $message === null ) {
+                       trigger_error( "Unknown HTTP status code $code", E_USER_WARNING );
+                       return false;
+               }
+
+               if ( $version === null ) {
+                       $version = isset( $_SERVER['SERVER_PROTOCOL'] ) && $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.0' ? '1.0' : '1.1';
+               }
+
+               header( "HTTP/$version $code $message" );
+       }
+
 }