From 52b077a48c743ba4d08ac00520a0bf1ef6deef5f Mon Sep 17 00:00:00 2001 From: Thomas Lange Date: Fri, 24 Feb 2017 21:27:59 +0100 Subject: Initial commit. --- core/namespace/HTTP.php | 234 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 core/namespace/HTTP.php (limited to 'core/namespace/HTTP.php') diff --git a/core/namespace/HTTP.php b/core/namespace/HTTP.php new file mode 100644 index 0000000..f9fbf01 --- /dev/null +++ b/core/namespace/HTTP.php @@ -0,0 +1,234 @@ + '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 Time-out', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Large', + 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 Time-out' + ]; + + #=============================================================================== + # Initialize $GET, $POST and $FILE + #=============================================================================== + public static function init($GET, $POST, $FILE, $removeArrays = FALSE, $trimValues = TRUE) { + self::$GET = $GET; + self::$POST = $POST; + self::$FILE = $FILE; + + $removeArrays AND self::removeArrays(); + + self::$GET = ($trimValues === TRUE ? self::trim(self::$GET) : self::$GET ); + self::$POST = ($trimValues === TRUE ? self::trim(self::$POST) : self::$POST); + } + + #=============================================================================== + # Remove all arrays from $_GET and $_POST + #=============================================================================== + private static function removeArrays() { + foreach(['GET', 'POST'] as $HTTP) { + foreach(self::$$HTTP as $name => $value) { + if(is_array(self::$$HTTP[$name])) { + unset(self::$$HTTP[$name]); + } + } + } + } + + #=============================================================================== + # Trim all strings in argument + #=============================================================================== + private static function trim($mixed) { + if(is_array($mixed)) { + return array_map('self::trim', $mixed); + } + + return trim($mixed); + } + + #=============================================================================== + # Checks if all elements of $arguments are set as key of $data + #=============================================================================== + private static function issetData($data, $arguments) { + foreach($arguments as $key) { + if(is_array($key)) { + if(!isset($data[key($key)]) OR $data[key($key)] !== $key[key($key)]) { + return FALSE; + } + } + + else if(!isset($data[$key]) OR !is_string($data[$key])) { + return FALSE; + } + } + + return TRUE; + } + + #=============================================================================== + # Return null or the value (if set) from one of the three requests attributes + #=============================================================================== + public static function returnKey($data, array $paths) { + $current = &$data; + + foreach($paths as $path) { + if(!isset($current[$path])) { + return NULL; + } + $current = &$current[$path]; + } + + return $current; + } + + #=============================================================================== + # Return GET value + #=============================================================================== + public static function GET() { + return self::returnKey(self::$GET, func_get_args()); + } + + #=============================================================================== + # Return POST value + #=============================================================================== + public static function POST() { + return self::returnKey(self::$POST, func_get_args()); + } + + #=============================================================================== + # Return FILE value + #=============================================================================== + public static function FILE() { + return self::returnKey(self::$FILE, func_get_args()); + } + + #=============================================================================== + # Checks if all elements of func_get_args() are set key of self::$POST + #=============================================================================== + public static function issetPOST() { + return self::issetData(self::$POST, func_get_args()); + } + + #=============================================================================== + # Checks if all elements of func_get_args() are set key of self::$GET + #=============================================================================== + public static function issetGET() { + return self::issetData(self::$GET, func_get_args()); + } + + #=============================================================================== + # Checks if all elements of func_get_args() are set key of self::$FILE + #=============================================================================== + public static function issetFILE() { + return self::issetData(self::$FILE, func_get_args()); + } + + #=============================================================================== + # Return HTTP request method or check if request method equals with $method + #=============================================================================== + public static function requestMethod($method = NULL) { + if(!empty($method)) { + return ($_SERVER['REQUEST_METHOD'] === $method); + } + + return $_SERVER['REQUEST_METHOD']; + } + + #=============================================================================== + # Return REQUEST_URL + #=============================================================================== + public static function requestURI() { + return $_SERVER['REQUEST_URL'] ?? FALSE; + } + + #=============================================================================== + # Sends a HTTP header line to the client + #=============================================================================== + public static function responseHeader($field, $value) { + self::sendHeader("{$field}: {$value}"); + } + + #=============================================================================== + # Sends a HTTP redirect to the client + #=============================================================================== + public static function redirect($location, $code = 303, $exit = TRUE) { + http_response_code($code); + self::sendHeader("Location: {$location}"); + $exit AND exit(); + } + + #=============================================================================== + # Sends a new HTTP header line to the client if headers are not already sent + #=============================================================================== + private static function sendHeader($header) { + if(!headers_sent()) { + header($header); + } + } +} +?> \ No newline at end of file -- cgit v1.2.3