PHP Classes

File: src/http_parse_params.func.php

Recommend this page to a friend!
  Classes of Kevin Muret   PHP HTTP Basic Authentication   src/http_parse_params.func.php   Download  
File: src/http_parse_params.func.php
Role: Auxiliary script
Content type: text/plain
Description: Auxiliary script
Class: PHP HTTP Basic Authentication
Handle requests that require user authentication
Author: By
Last change:
Date: 6 years ago
Size: 2,099 bytes
 

Contents

Class file image Download
<?php
// Function needed to parse Digest params
// can be replaced by a php extension (http://php.net/manual/fa/function.http-parse-params.php)
function __http_parse_nextParam($param, $offset = 0){
    ;
$next_pos = array(
       
strpos($param, ",", $offset)
    ,
strpos($param, ";", $offset)
    )
    ;if (
$next_pos[0] === $next_pos[1]) return $next_pos[0]
    ;else if (
$next_pos[0] === false) return $next_pos[1]
    ;else if (
$next_pos[1] === false) return $next_pos[0]
    ;else return
min($next_pos[0], $next_pos[1])
    ;
}
function
http_parse_params($param){
    ;
$res = array()
    ;
$offset = 0
   
;while (true) {
        ;
$next_pos = __http_parse_nextParam($param, $offset)
        ;if (
trim($frag = $next_pos !== false ? substr($param, $offset, $next_pos - $offset)
        :
substr($param, $offset))) {
           
// No quote
           
;if (!preg_match("#^\s*([^=\s]+)\s*=\s*\"([^\"]*)#", $frag, $match)) {
                ;if (
preg_match("#^\s*([^=\s]+)\s*=\s*([^\s]+)\s*$#", $frag, $match))
                   
$res[$match[1]] = $match[2]
                ;else
array_push($res, trim($frag))
                ;if (
$next_pos === false) break
                ;
$offset = $next_pos + 1
               
;
           
// With quote
           
} else {
                ;
$cut = $offset + strlen($match[0])
                ;
$offset = $cut
               
;if (substr($param, $offset, 1) === "\"") {
                    ;
$res[$match[1]] = str_replace("\\\"", "\"", $match[2])
                    ;if (
$next_pos === false) break
                    ;
$offset = __http_parse_nextParam($param, $offset + 1)
                    ;
                } else {
                    ;while ((
$eof = strpos($param, "\"", $offset)) !== false) {
                        ;
$frag = substr($param, $offset, $eof - $offset)
                        ;if (
preg_match("#\\\\+$#", $frag, $match_escape)) {
                            ;if (!(
strlen($match_escape[0]) % 2))
                                break
                            ;
                        } else break
                        ;
$offset = $eof+1
                       
;
                    }
                    ;
$res[$match[1]] = str_replace("\\\"", "\"", $match[2].($eof === false
                   
? substr($param, $cut) : substr($param, $cut, $eof - $cut)))
                    ;if (
$eof === false
                   
|| ($offset = __http_parse_nextParam($param, $eof)) === false)
                        break
                    ;
                }
                ;
$offset++
                ;
            }
        } else if (
$next_pos === false) break
        ;else
$offset = $next_pos + 1
       
;
    }
    ;return (object)array(
'params' => $res)
    ;
}