Location: PHPKode > scripts > Header > header/Header.php5
<?php
/**
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @author Kai Dorschner <the-hide@address.com>
 * @copyright Copyright 2008, Kai Dorschner
 * @license http://www.gnu.org/licenses/lgpl.html LGPLv3
 */

/**
 * Modifies HTTP Header.
 *
 * Design with singleton pattern.
 */
class Header {

	protected $statuscodes = array(
		'100' => 'Continue',
		'101' => 'Switching Protocols',
		'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',
		'303' => 'See Other',
		'304' => 'Not Modified',
		'305' => 'Use Proxy',
		'307' => 'Temporary Redirect',
		'400' => 'Bad Request',
		'401' => 'Unauthorized',
		'402' => 'Payment Required',
		'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'
	);

	/**
	 *
	 */
	protected static $instance;
	/**
	 * Flag which indicated wether the header has already been sent.
	 *
	 * @access private
	 */
	protected $sent = false;

	/**
	 * Internal header buffer.
	 *
	 * Saves all header strings.
	 *
	 * @access protected
	 */
	protected $buffer = array();


	/**
	 * Singleton-pattern constructor set protected to deny direct access.
	 */
	protected function __construct() {
		$this->sent = headers_sent();
	}

	public function __destruct() {
		return $this->sendHeader();
	}


	/**
	 * Singleton-pattern method to get instance.
	 */
	public static function getInstance() {
		if(!isset($instance))
			self::$instance = new Header();
		return self::$instance;
	}

	public function sendHeader() {
		if(!$this->sent & !headers_sent()) {
			foreach($this->buffer as $part)
				if(count($part) > 1)
					header($part[0] . ': ' . $part[1]);
				else
					header($part[0]);
			return true;
		}
		$this->sent = true;
		return false;
	}

	protected function add($type, $value = '') {
		$this->sent = headers_sent();
		if(!$this->sent) {
			$type[0] = strtoupper($type[0]);
			$this->buffer[] = array($type, $value);
		} else
			throw new Exception('Cannot add a buffer. Header already sent.');
	}

	public function location($location) {
		$this->add('Location', $location);
	}

	public function contentType($media, $charset = '') {
		$this->add('Content-Type', $media . (empty($charset) ? '': '; charset=' . $charset));
	}

	public function contentDisposition($filename, $disposition = 'inline') {
		$this->add('Content-Disposition', $disposition . '; filename="' . $filename . '"');
	}

	public function status(int $statuscode) {
		$this->add('HTTP/1.0 ' . $statuscode . ' ' . $this->statuscodes[$statuscode]);
	}
}
Return current item: Header