PHP Doku:: Parse HTTP headers - function.http-parse-headers.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzSonstige DiensteHTTPHTTP Funktionenhttp_parse_headers

Ein Service von Reinhard Neidl - Webprogrammierung.

HTTP Funktionen

<<http_parse_cookie

http_parse_message>>

http_parse_headers

(PECL pecl_http >= 0.10.0)

http_parse_headersParse HTTP headers

Beschreibung

array http_parse_headers ( string $header )

Parses HTTP headers into an associative array.

Parameter-Liste

header

string containing HTTP headers

Rückgabewerte

Returns an array on successIm Fehlerfall wird FALSE zurückgegeben..

Beispiele

Beispiel #1 Using http_parse_headers()

<?php
$headers 
"content-type: text/html; charset=UTF-8\r\n".
  
"Server: Funky/1.0\r\n".
  
"Set-Cookie: foo=bar\r\n".
  
"Set-Cookie: baz=quux\r\n".
  
"Folded: works\r\n\ttoo\r\n";
print_r(http_parse_headers($headers));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
  [Content-Type] => text/html; chatset=UTF-8
  [Server] => Funky/1.0
  [Set-Cookie] => Array
  (
    [0] => foo=bar
    [1] => baz=quux
  )
  [Folded] => works
    too
)

Siehe auch


2 BenutzerBeiträge:
- Beiträge aktualisieren...
user at example dot net
21.08.2007 13:45
This one works better:

<?php

   
function http_parse_headers( $header )
    {
       
$retVal = array();
       
$fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header));
        foreach(
$fields as $field ) {
            if(
preg_match('/([^:]+): (.+)/m', $field, $match) ) {
               
$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
                if( isset(
$retVal[$match[1]]) ) {
                   
$retVal[$match[1]] = array($retVal[$match[1]], $match[2]);
                } else {
                   
$retVal[$match[1]] = trim($match[2]);
                }
            }
        }
        return
$retVal;
    }

?>
luigi dot sexpistols at gmail dot com
8.08.2006 7:49
If you don't have access to the PECL library, you can use this code to parse headers contained in strings.

Note that it's probably not as robust as the PECL version, as it only parses if the headers are separated by newlines (\n). This isn't a problem in most cases, though, as the standard suggests to use \r\n as the delimiter for headers.

HTTP response code is put into 'status'.

Any suggestions welcome!

<?
function http_parse_headers($headers=false){
    if(
$headers === false){
        return
false;
        }
   
$headers = str_replace("\r","",$headers);
   
$headers = explode("\n",$headers);
    foreach(
$headers as $value){
       
$header = explode(": ",$value);
        if(
$header[0] && !$header[1]){
           
$headerdata['status'] = $header[0];
            }
        elseif(
$header[0] && $header[1]){
           
$headerdata[$header[0]] = $header[1];
            }
        }
    return
$headerdata;
    }

$headers = "HTTP/1.1 200 OK\r\n
Date: Tue, 08 Aug 2006 05:32:01 GMT\r\n
X-Powered-By: PHP/4.4.3-dev\r\n
Data 1: Value for Data 1\r\n
Data 2: Value for Data 2\r\n
Connection: close\r\n
Content-Type: text/html\r\n"
;

http_parse_headers($headers);

// OUTPUT:

array(7) {
  [
"status"]=>
 
string(15) "HTTP/1.1 200 OK"
 
["Date"]=>
 
string(29) "Tue, 08 Aug 2006 05:32:01 GMT"
 
["X-Powered-By"]=>
 
string(13) "PHP/4.4.3-dev"
 
["Data 1"]=>
 
string(16) "Value for Data 1"
 
["Data 2"]=>
 
string(16) "Value for Data 2"
 
["Connection"]=>
 
string(5) "close"
 
["Content-Type"]=>
 
string(9) "text/html"
}
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)