xref: /plugin/combo/ComboStrap/Http.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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