SI : solo necesita un solo 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, utilizando FastCGI (método simple):
apache_request_headers ()
<?php
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ELSE: En cualquier otro caso, puede usar (implementación 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";
}
Consulte también :
getallheaders () - (PHP> = 5.4) edición multiplataforma Alias de apache_request_headers()
apache_response_headers () - Obtenga todos los encabezados de respuesta HTTP.
headers_list () - Obtiene una lista de encabezados para enviar.
RFC3875 , 4.1.18:
fuente
$_SERVER
variable? La documentación de PHP en php.net/manual/en/reserved.variables.server.php es evasiva sobre lo que podemos estar seguros de que estará allí.cache-control
encabezado, pero no lo veo en ningún lado$_SERVER
. Veo varios encabezados con el prefijoHTTP_
, incluidos "HTTP_ACCEPT", y "HTTP_UPGRADE_INSECURE_REQUESTS" y "HTTP_USER_AGENT" (entre otros). Pero nada para "control de caché" tampoco para "pragma". Esto es independientemente del caso oHTTP_
prefijo. ¿Me estoy perdiendo de algo?_SERVER["HTTP_CACHE_CONTROL"] max-age=0
Debería encontrar todos los encabezados HTTP en la
$_SERVER
variable global con el prefijo enHTTP_
mayúsculas y con guiones (-) reemplazados por guiones bajos (_).Por ejemplo,
X-Requested-With
se puede encontrar en:Puede ser conveniente crear una matriz asociativa a partir de la
$_SERVER
variable. Esto se puede hacer en varios estilos, pero aquí hay una función que genera teclas en camello:Ahora solo use
$headers['XRequestedWith']
para recuperar el encabezado deseado.Manual de PHP en
$_SERVER
: http://php.net/manual/en/reserved.variables.server.phpfuente
parseRequestHeaders()
función. Si se necesita dicha matriz asociativa, entonces IMO la función apache es la mejor opción, ya que devuelve exactamente los encabezados recibidos en lugar de una versión de CamelCase destrozada. (También tenga en cuenta que a partir de PHP 5.4, ya no es solo Apache.)apache_request_headers()
ogetallheaders()
no parece poner en mayúscula los nombres de encabezado cuando lo probé. Están regresando exactamente cuando paso del lado del cliente. Entonces, ¿por qué está capitalizando los nombres de encabezado en una función de reemplazo?Desde PHP 5.4.0 puede usar la
getallheaders
función que devuelve todos los encabezados de solicitud como una matriz asociativa:Anteriormente, esta función solo funcionaba cuando PHP se ejecutaba como un módulo Apache / NSAPI.
fuente
strtolower
falta en varias de las soluciones propuestas, RFC2616 (HTTP / 1.1) define los campos de encabezado como entidades que no distinguen entre mayúsculas y minúsculas. Todo, no solo la parte del valor .Por lo tanto, sugerencias como solo analizar entradas HTTP_ son incorrectas.
Mejor sería así:
Observe las diferencias sutiles con las sugerencias anteriores. La función aquí también funciona en php-fpm (+ nginx).
fuente
Date
encabezado, y que "los valores de los parámetros [texto en Tipo de contenido después del punto y coma] pueden o no distinguen entre mayúsculas y minúsculas". Entonces, dado que hay al menos dos encabezados con valores que distinguen entre mayúsculas y minúsculas, parece que estás equivocado.HTTP header fields, which include general-header (section 4.5), request-header (section 5.3), response-header (section 6.2), and entity-header (section 7.1) fields, follow the same generic format as that given in Section 3.1 of RFC 822 [9]. Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive.
Entonces supongo que te equivocas.Pase un nombre de encabezado a esta función para obtener su valor sin usar el
for
bucle. Devuelve nulo si no se encuentra el encabezado.Nota: esto solo funciona con el servidor Apache, consulte: http://php.net/manual/en/function.getallheaders.php
Nota: esta función procesará y cargará todos los encabezados en la memoria y es menos eficaz que un
for
bucle.fuente
Para simplificar las cosas, así es como puede obtener lo que desea:
Sencillo:
o cuando necesita obtener uno a la vez:
Los otros encabezados también están en la matriz súper global $ _SERVER, puede leer acerca de cómo obtenerlos aquí: http://php.net/manual/en/reserved.variables.server.php
fuente
HTTP_
a la$headerKey
Estaba usando CodeIgniter y usé el siguiente código para obtenerlo. Puede ser útil para alguien en el futuro.
fuente
Así es como lo estoy haciendo. Debe obtener todos los encabezados si no se pasa $ header_name:
Me parece mucho más simple que la mayoría de los ejemplos dados en otras respuestas. Esto también obtiene el método (GET / POST / etc.) Y el URI solicitado al obtener todos los encabezados que pueden ser útiles si está tratando de usarlo en el registro.
Aquí está el resultado:
fuente
Aquí hay una manera fácil de hacerlo.
fuente
Este pequeño fragmento de PHP puede serle útil:
fuente
Utilizo esta función para obtener los encabezados personalizados, si el encabezado comienza desde "HTTP_X_", insertamos la matriz :)
fuente
si solo se requiere una clave para recuperarla, por ejemplo
"Host"
, se requiere una dirección, entonces podemos usarPara que podamos evitar bucles y ponerlo en línea a las salidas de eco
fuente
PHP 7: Operador de fusión nula
fuente
Esto funciona si tienes un servidor Apache
Código PHP:
Resultado:
fuente