'Continue', 101 => 'Switching Protocols', 102 => 'Processing', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 204 => 'No Content', 206 => 'Partial Content', 207 => 'Multi-Status', 300 => 'Multiple Choices', 301 => 'Moves Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 307 => 'Temporary Redirect', 308 => 'Permanent Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Payload Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Request Range Not Satisfiable', 417 => 'Expectation Failed', 418 => 'Im a teapot', 420 => 'Enhance Your Calm', 421 => 'Misdirected Request', 422 => 'Unprocessable Entity', 423 => 'Locked', 424 => 'Failed Dependency', 425 => 'Too Early', 426 => 'Upgrade Required', 429 => 'Too Many Requests', 431 => 'Request Header Fields Too Large', 444 => 'No Response', 450 => 'Blocked by Windows Parental Controls', 451 => 'Unavailable For Legal Reasons', 499 => 'Client Closed Request', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 506 => 'Variant Also Negotiates', 507 => 'Insufficient Storage', 508 => 'Loop Detected', 509 => 'Bandwidth Limit Exceeded', 510 => 'Not Extended', 511 => 'Network Authentication Required', 599 => 'Network Connect Timeout Error' ]; /** * This variable set methods to use headers * @var $methods */ private $methods = []; /** * This variable for logs * @var $log */ private $log; /** * This variable for set new configs. * @var $config */ private $config; ######################################################################## ##### CLASS METHODS ##### ######################################################################## function __construct($config = null) { $this->config($config); $this->blockRequest(); } public function config($config) { if ($config) { foreach ($config as $key => $val) { $this->config[strtoupper($key)] = $val; } } return $this->config; } public function API($contentType) { $this->methods([ "Access-Control-Allow-Origin" => ['*'], "Content-Type" => $contentType, "Access-Control-Allow-Methods" => ['GET', 'POST', 'PUT', 'DELETE'], "Access-Control-Max-Age" => 0, "Access-Control-Allow-Headers" => ['Origin', 'X-Requested-With', 'Content-Type', 'Accept', 'Authorization'] ]); $this->bootstrap(); } public function response($code) { if (array_key_exists($code, self::HTTP_CODE_RESPONSE)) { header("HTTP/1.0 {$code} " . self::HTTP_CODE_RESPONSE[$code]); } } public function redirect($url = null) { // $redirect = ($url ? $url : $this->config['REDIRECT']); // if (strpos('http://', $redirect) === false && strpos('https://', $redirect) === false) { // $redirect = "http://$redirect"; // } $redirect = $url ? $url : CONF_MIDDLEWARE_REDIRECT; $this->methods([ "Location" => ($redirect) ]); $this->bootstrap(); } public function fileTransfer($name, $file, $mimetype) { //logger('logggeeeee')->info(basename($name . "." . explode('/', $mimetype)[1])); $this->methods([ "Content-Description" => 'File Transfer', "Content-Transfer-Encoding" => "binary", "Content-Type" => $mimetype, "Cache-Control" => "must-revalidate", "Content-Length" => filesize($file), "Content-Disposition" => "attachment; filename=" . basename($name . "." . explode('/', $mimetype)[1]), "Expires" => 0, "Connection" => 'close', "Pragma" => 'public' ]); $this->bootstrap(); ob_end_clean(); ob_start(); readfile($file); ob_flush(); } ######################################################################## ##### PRIVATE METHODS ##### ######################################################################## private function bootstrap($header = null) { if (!$header && !$this->getMethods()) { return null; } foreach ($header as $key => $val) { if (!in_array($key, $this->headers)) { array_push($this->headers, $key); } } $this->methods($header); $this->headers(); $this->clean(); } private function blockRequest() { if ($this->config['BLOCK_REQUEST']) { if (is_array($this->config['BLOCK_REQUEST'])) { if (in_array($_SERVER['REMOTE_ADDR'], $this->config['BLOCK_REQUEST'])) { $this->log->info("BLOCK REQUEST: " . $_SERVER['REMOTE_ADDR']); $this->response(301); $this->redirect(($this->config['REDIRECT'] ? $this->config['REDIRECT'] : 'index.php')); exit(0); } } else if ($_SERVER['REMOTE_ADDR'] == $this->config['BLOCK_REQUEST']) { $this->log->info("BLOCK REQUEST: " . $_SERVER['REMOTE_ADDR']); $this->response(301); $this->redirect($this->config['REDIRECT']); exit(0); } } } private function headers() { foreach ($this->methods as $key => $header) { if (in_array($key, $this->headers)) { header("{$key}: {$header}"); } } } private function methods($header) { foreach ($header as $key => $val) { $method = str_replace(' ', '-', ucwords(str_replace('-', ' ', $key))); if (is_array($val)) { $this->methods[$method] = implode(',', $val); } else { $this->methods[$method] = $val; } } } private function clean() { unset($this->methods); } ######################################################################## ##### GETS AND SETTERS ##### ######################################################################## function getMethods() { return $this->methods; } }