¿Cómo leo cualquier encabezado de solicitud en PHP?

Resuelto Sabya asked hace 54 años • 16 respuestas

¿Cómo debo leer cualquier encabezado en PHP?

Por ejemplo, el encabezado personalizado: X-Requested-With.

Sabya avatar Jan 01 '70 08:01 Sabya
Aceptado

SI : sólo necesitas un único encabezado, en lugar de todos los encabezados, el método más rápido es:

<?php
// Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_')
$headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX'];


ELSE IF : ejecuta PHP como un módulo de Apache o, a partir de PHP 5.4, usando FastCGI (método simple):

apache_request_headers()

<?php
$headers = apache_request_headers();

foreach ($headers as $header => $value) {
    echo "$header: $value <br />\n";
}


DE LO CONTRARIO: En cualquier otro caso, puede utilizar (implementación del espacio de usuario):

<?php
function getRequestHeaders() {
    $headers = array();
    foreach($_SERVER as $key => $value) {
        if (substr($key, 0, 5) <> 'HTTP_') {
            continue;
        }
        $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
        $headers[$header] = $value;
    }
    return $headers;
}

$headers = getRequestHeaders();

foreach ($headers as $header => $value) {
    echo "$header: $value <br />\n";
}


Ver también :
getallheaders() - (PHP >= 5.4) edición multiplataforma Alias ​​de apache_request_headers() apache_response_headers() - Recupera todos los encabezados de respuesta HTTP.
headers_list() : recupera una lista de encabezados que se enviarán.

Jacco avatar Feb 12 '2009 14:02 Jacco
$_SERVER['HTTP_X_REQUESTED_WITH']

RFC3875 , 4.1.18:

Las metavariables con nombres que comienzan con HTTP_contienen valores leídos de los campos del encabezado de solicitud del cliente, si el protocolo utilizado es HTTP. El nombre del campo del encabezado HTTP se convierte a mayúsculas, se reemplazan todas las apariciones de -y _se HTTP_antepone para dar el nombre de la metavariable.

Quassnoi avatar Feb 12 '2009 14:02 Quassnoi

Debería encontrar todos los encabezados HTTP en la $_SERVERvariable global con el prefijo en HTTP_mayúsculas y guiones (-) reemplazados por guiones bajos (_).

Por ejemplo, se X-Requested-Withpuede encontrar en:

$_SERVER['HTTP_X_REQUESTED_WITH']

Puede resultar conveniente crear una matriz asociativa a partir de la $_SERVERvariable. Esto se puede hacer en varios estilos, pero aquí hay una función que genera claves en formato camello:

$headers = array();
foreach ($_SERVER as $key => $value) {
    if (strpos($key, 'HTTP_') === 0) {
        $headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
    }
}

Ahora sólo tiene que utilizar $headers['XRequestedWith']para recuperar el encabezado deseado.

Manual de PHP en $_SERVER: http://php.net/manual/en/reserved.variables.server.php

Thomas Jensen avatar Jul 29 '2012 12:07 Thomas Jensen

Desde PHP 5.4.0 puedes usar getallheadersla función que devuelve todos los encabezados de solicitud como una matriz asociativa:

var_dump(getallheaders());

// array(8) {
//   ["Accept"]=>
//   string(63) "text/html[...]"
//   ["Accept-Charset"]=>
//   string(31) "ISSO-8859-1[...]"
//   ["Accept-Encoding"]=>
//   string(17) "gzip,deflate,sdch"
//   ["Accept-Language"]=>
//   string(14) "en-US,en;q=0.8"
//   ["Cache-Control"]=>
//   string(9) "max-age=0"
//   ["Connection"]=>
//   string(10) "keep-alive"
//   ["Host"]=>
//   string(9) "localhost"
//   ["User-Agent"]=>
//   string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) [...]"
// }

Anteriormente, esta función solo funcionaba cuando PHP se ejecutaba como un módulo Apache/NSAPI.

Salman A avatar Jan 25 '2013 16:01 Salman A