137748cd8SNickeau<?php 237748cd8SNickeau 337748cd8SNickeau 437748cd8SNickeaunamespace ComboStrap; 537748cd8SNickeau 637748cd8SNickeau 737748cd8SNickeauclass Http 837748cd8SNickeau{ 937748cd8SNickeau 101fa8c418SNickeau public static function removeHeaderIfPresent(string $key) 111fa8c418SNickeau { 121fa8c418SNickeau foreach (headers_list() as $header) { 131fa8c418SNickeau if (preg_match("/$key/i", $header)) { 141fa8c418SNickeau header_remove($key); 151fa8c418SNickeau } 161fa8c418SNickeau } 171fa8c418SNickeau 181fa8c418SNickeau } 191fa8c418SNickeau 201fa8c418SNickeau public static function getHeader(string $name) 211fa8c418SNickeau { 221fa8c418SNickeau 231fa8c418SNickeau $result = array(); 241fa8c418SNickeau foreach (self::getHeaders() as $header) { 251fa8c418SNickeau if (substr($header, 0, strlen($name) + 1) == $name . ':') { 261fa8c418SNickeau $result[] = $header; 271fa8c418SNickeau } 281fa8c418SNickeau } 291fa8c418SNickeau 301fa8c418SNickeau return count($result) == 1 ? $result[0] : $result; 311fa8c418SNickeau 321fa8c418SNickeau } 331fa8c418SNickeau 341fa8c418SNickeau private static function getHeaders(): array 351fa8c418SNickeau { 361fa8c418SNickeau return (function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list()); 371fa8c418SNickeau } 38*c3437056SNickeau 39*c3437056SNickeau /** 40*c3437056SNickeau * Set the HTTP status 41*c3437056SNickeau * Dokuwiki test does not {@link \TestResponse::getStatusCode()} capture the status with all php function such 42*c3437056SNickeau * as {@link http_response_code}, 43*c3437056SNickeau * 44*c3437056SNickeau * @param int $int 45*c3437056SNickeau */ 46*c3437056SNickeau public static function setStatus(int $int) 47*c3437056SNickeau { 48*c3437056SNickeau /** 49*c3437056SNickeau * {@link http_status} function 50*c3437056SNickeau * that creates 51*c3437056SNickeau * header('HTTP/1.1 301 Moved Permanently'); 52*c3437056SNickeau * header('HTTP/1.0 304 Not Modified'); 53*c3437056SNickeau * header('HTTP/1.1 404 Not Found'); 54*c3437056SNickeau * 55*c3437056SNickeau * not {@link http_response_code} 56*c3437056SNickeau */ 57*c3437056SNickeau http_status($int); 58*c3437056SNickeau 59*c3437056SNickeau } 60*c3437056SNickeau 61*c3437056SNickeau public static function getStatus() 62*c3437056SNickeau { 63*c3437056SNickeau /** 64*c3437056SNickeau * See also {@link Http::getHeader()} 65*c3437056SNickeau * if this does not work 66*c3437056SNickeau */ 67*c3437056SNickeau return http_response_code(); 68*c3437056SNickeau } 69*c3437056SNickeau 70*c3437056SNickeau public static function setMime(string $mime) 71*c3437056SNickeau { 72*c3437056SNickeau $contentTypeHeader = Mime::HEADER_CONTENT_TYPE; 73*c3437056SNickeau header("$contentTypeHeader: $mime"); 74*c3437056SNickeau } 75*c3437056SNickeau 76*c3437056SNickeau public static function setJsonMime() 77*c3437056SNickeau { 78*c3437056SNickeau Http::setMime(Mime::JSON); 79*c3437056SNickeau } 80*c3437056SNickeau 81*c3437056SNickeau /** 82*c3437056SNickeau * PHP is blocking and fsockopen also. 83*c3437056SNickeau * Don't use it in a page rendering flow 84*c3437056SNickeau * https://segment.com/blog/how-to-make-async-requests-in-php/ 85*c3437056SNickeau * @param $url 86*c3437056SNickeau */ 87*c3437056SNickeau function sendAsyncRequest($url) 88*c3437056SNickeau { 89*c3437056SNickeau $parts=parse_url($url); 90*c3437056SNickeau $fp = fsockopen($parts['host'],isset($parts['port'])?$parts['port']:80,$errno, $errstr, 30); 91*c3437056SNickeau $out = "GET ".$parts['path'] . "?" . $parts['query'] . " HTTP/1.1\r\n"; 92*c3437056SNickeau $out.= "Host: ".$parts['host']."\r\n"; 93*c3437056SNickeau $out.= "Content-Length: 0"."\r\n"; 94*c3437056SNickeau $out.= "Connection: Close\r\n\r\n"; 95*c3437056SNickeau 96*c3437056SNickeau fwrite($fp, $out); 97*c3437056SNickeau fclose($fp); 98*c3437056SNickeau } 99*c3437056SNickeau 100*c3437056SNickeau 10137748cd8SNickeau} 102