HTTP 函数
在线手册:中文 英文
PHP手册

http_parse_headers

(PECL pecl_http >= 0.10.0)

http_parse_headersParse HTTP headers

说明

array http_parse_headers ( string $header )

Parses HTTP headers into an associative array.

参数

header

string containing HTTP headers

返回值

Returns an array on success 或者在失败时返回 FALSE.

范例

Example #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));
?>

以上例程会输出:

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

参见


HTTP 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: Parse HTTP headers

用户评论:

user at example dot net (21-Aug-2007 12: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 (08-Aug-2006 06: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"
}
?>