IF : você só precisa de um único cabeçalho, em vez de todos os cabeçalhos, o método mais rápido é:
<?php
// Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_')
$headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX'];
ELSE SE : você executa o PHP como um módulo Apache ou, a partir do PHP 5.4, usando o FastCGI (método simples):
apache_request_headers ()
<?php
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ELSE: Em qualquer outro caso, você pode usar (implementação da terra do usuário):
<?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 também :
getallheaders () - (PHP> = 5.4) edição entre plataformas Alias de apache_request_headers()
apache_response_headers () - Busque todos os cabeçalhos de resposta HTTP.
headers_list () - Busca uma lista de cabeçalhos a serem enviados.
RFC3875 , 4.1.18:
fonte
$_SERVER
variável? A documentação do PHP em php.net/manual/en/reserved.variables.server.php é evasiva sobre o que podemos ter certeza de que estará lá.cache-control
cabeçalho, mas não o vejo em nenhum lugar$_SERVER
. Eu vejo vários cabeçalhos prefixadosHTTP_
, incluindo "HTTP_ACCEPT" e "HTTP_UPGRADE_INSECURE_REQUESTS" e "HTTP_USER_AGENT" (entre vários outros). Mas nada para "controle de cache" também nada para "pragma". Isso é independente do caso ouHTTP_
prefixo. Estou esquecendo de algo?_SERVER["HTTP_CACHE_CONTROL"] max-age=0
Você deve encontrar todos os cabeçalhos HTTP na
$_SERVER
variável global prefixada comHTTP_
maiúsculas e com traços (-) substituídos por sublinhados (_).Por exemplo, você
X-Requested-With
pode ser encontrado em:Pode ser conveniente criar uma matriz associativa a partir da
$_SERVER
variável Isso pode ser feito em vários estilos, mas aqui está uma função que gera teclas com camelcased:Agora basta usar
$headers['XRequestedWith']
para recuperar o cabeçalho desejado.Manual do PHP em
$_SERVER
: http://php.net/manual/en/reserved.variables.server.phpfonte
parseRequestHeaders()
função. Se for necessária uma matriz associativa, a função apache da IMO é a melhor opção, pois retorna exatamente os cabeçalhos recebidos em vez de uma versão CamelCase mutilada. (De referir ainda que a partir do PHP 5.4, já não Apache somente é.)apache_request_headers()
ougetallheaders()
não parece colocar em maiúscula os nomes dos cabeçalhos quando testei. Eles estão retornando exatamente como eu passo do lado do cliente. Então, por que você está capitalizando nomes de cabeçalho em uma função de substituição?Desde o PHP 5.4.0 você pode usar a
getallheaders
função que retorna todos os cabeçalhos de solicitação como uma matriz associativa:Anteriormente, essa função funcionava apenas quando o PHP estava sendo executado como um módulo Apache / NSAPI.
fonte
strtolower
Na falta de várias soluções propostas, o RFC2616 (HTTP / 1.1) define os campos de cabeçalho como entidades que não diferenciam maiúsculas de minúsculas. A coisa toda, não apenas o valor parte .Então, sugestões como apenas analisar HTTP_ entradas estão erradas.
Melhor seria assim:
Observe as diferenças sutis com sugestões anteriores. A função aqui também funciona em php-fpm (+ nginx).
fonte
Date
cabeçalho - e que "os valores de parâmetro [texto em Tipo de conteúdo após ponto e vírgula] podem ou não diferenciar maiúsculas de minúsculas". Portanto, considerando que há pelo menos dois cabeçalhos com valores que diferenciam maiúsculas de minúsculas, parece que você está errado.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.
Então eu acho que você está errado.Passe um nome de cabeçalho para esta função para obter seu valor sem usar o
for
loop. Retorna nulo se o cabeçalho não for encontrado.Nota: isso funciona apenas com o servidor Apache, consulte: http://php.net/manual/en/function.getallheaders.php
Nota: esta função processará e carregará todos os cabeçalhos na memória e terá menos desempenho do que um
for
loop.fonte
Para simplificar, eis como você pode obter exatamente o que deseja:
Simples:
ou quando você precisar obter um de cada vez:
Os outros cabeçalhos também estão na matriz super global $ _SERVER, você pode ler sobre como acessá-los aqui: http://php.net/manual/en/reserved.variables.server.php
fonte
HTTP_
$headerKey
Eu estava usando o CodeIgniter e usei o código abaixo para obtê-lo. Pode ser útil para alguém no futuro.
fonte
Aqui está como eu estou fazendo isso. Você precisa obter todos os cabeçalhos se $ header_name não for passado:
Parece-me muito mais simples do que a maioria dos exemplos dados em outras respostas. Isso também obtém o método (GET / POST / etc.) E o URI solicitado ao obter todos os cabeçalhos que podem ser úteis se você estiver tentando usá-lo no log.
Aqui está a saída:
fonte
Aqui está uma maneira fácil de fazer isso.
fonte
Este pequeno trecho de PHP pode ser útil para você:
fonte
Eu uso essa função para obter os cabeçalhos personalizados, se o cabeçalho começa em "HTTP_X_", pressionamos a matriz :)
fonte
se apenas uma chave for necessária para recuperar, por exemplo, o
"Host"
endereço é necessário, então podemos usarPara que possamos evitar loops e alinhá-los às saídas de eco
fonte
PHP 7: Operador de coalescência nula
fonte
Este trabalho se você tiver um servidor Apache
Código PHP:
Resultado:
fonte