JEŻELI : potrzebujesz tylko jednego nagłówka, zamiast wszystkich nagłówków, najszybszą metodą jest:
<?php
// Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_')
$headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX'];
ELSE JEŻELI : uruchamiasz PHP jako moduł Apache lub, począwszy od PHP 5.4, używając FastCGI (prosta metoda):
apache_request_headers ()
<?php
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ELSE: W każdym innym przypadku możesz użyć (implementacja przestrzeni użytkownika):
<?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";
}
Zobacz też :
getallheaders () - (PHP> = 5.4) edycja wieloplatformowa Alias apache_request_headers()
apache_response_headers () - Pobierz wszystkie nagłówki odpowiedzi HTTP.
headers_list () - Pobierz listę nagłówków do wysłania.
RFC3875 , 4.1.18 :
źródło
$_SERVER
zmiennej? Dokumentacja PHP pod adresem php.net/manual/en/reserved.variables.server.php nie jest pewna, co możemy być pewni.cache-control
nagłówek, ale nigdzie go nie widzę$_SERVER
. Widzę kilka nagłówków z prefiksemHTTP_
, w tym „HTTP_ACCEPT”, „HTTP_UPGRADE_INSECURE_REQUESTS” i „HTTP_USER_AGENT” (między innymi). Ale nic dla „kontroli pamięci podręcznej” również nic dla „pragmy”. Jest to niezależne od wielkości liter lubHTTP_
prefiksu. Czy coś brakuje?_SERVER["HTTP_CACHE_CONTROL"] max-age=0
Powinieneś znaleźć wszystkie nagłówki HTTP w
$_SERVER
zmiennej globalnej zHTTP_
wielkimi literami i myślnikami (-) zastąpionymi znakami podkreślenia (_).Na przykład
X-Requested-With
można znaleźć w:Wygodne może być utworzenie tablicy asocjacyjnej ze
$_SERVER
zmiennej. Można to zrobić w kilku stylach, ale oto funkcja, która wyprowadza klawisze z wielbłądziem:Teraz wystarczy użyć,
$headers['XRequestedWith']
aby pobrać żądany nagłówek.Podręcznik PHP na
$_SERVER
: http://php.net/manual/en/reserved.variables.server.phpźródło
parseRequestHeaders()
funkcji. Jeśli taka tablica asocjacyjna jest potrzebna, wtedy najlepszą opcją jest funkcja IMO, ponieważ zwraca ona dokładnie odebrane nagłówki zamiast zniekształconej wersji CamelCase. (Zauważ też, że od PHP 5.4 nie jest już tylko Apache.)apache_request_headers()
lubgetallheaders()
wydaje się, że nie testuję wielkich liter w nagłówkach. Wracają dokładnie tak, jak przechodzę od strony klienta. Dlaczego więc używasz wielkich liter w takiej funkcji zastępczej?Od PHP 5.4.0 możesz używać
getallheaders
funkcji, która zwraca wszystkie nagłówki żądań jako tablicę asocjacyjną:Wcześniej ta funkcja działała tylko wtedy, gdy PHP działało jako moduł Apache / NSAPI.
źródło
strtolower
brakuje kilku proponowanych rozwiązań, RFC2616 (HTTP / 1.1) definiuje pola nagłówka jako byty bez rozróżniania wielkości liter. Cała sprawa, nie tylko część wartości .Dlatego sugestie, takie jak tylko analizowanie wpisów HTTP_, są błędne.
Lepiej byłoby tak:
Zwróć uwagę na subtelne różnice w stosunku do poprzednich sugestii. Ta funkcja działa również na php-fpm (+ nginx).
źródło
Date
nagłówka - i że „Wartości parametrów [tekst w typie treści po średniku] może, ale nie musi, rozróżniać małe i wielkie litery”. Biorąc pod uwagę, że istnieją co najmniej dwa nagłówki z wartościami uwzględniającymi wielkość liter, wydaje się, że się mylisz.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.
Więc chyba się mylisz.Przekaż nazwę nagłówka do tej funkcji, aby uzyskać jej wartość bez użycia
for
pętli. Zwraca null, jeśli nagłówek nie został znaleziony.Uwaga: działa tylko z serwerem Apache, patrz: http://php.net/manual/en/function.getallheaders.php
Uwaga: ta funkcja przetwarza i ładuje wszystkie nagłówki do pamięci i jest mniej wydajna niż
for
pętla.źródło
Aby uprościć sprawę, oto jak możesz uzyskać tylko to, czego potrzebujesz:
Prosty:
lub gdy musisz zdobyć jeden na raz:
Pozostałe nagłówki są również w superglobalnej tablicy $ _SERVER, możesz przeczytać o tym, jak je uzyskać tutaj: http://php.net/manual/en/reserved.variables.server.php
źródło
HTTP_
do$headerKey
Korzystałem z CodeIgniter i użyłem kodu poniżej, aby go zdobyć. Może być przydatny dla kogoś w przyszłości.
źródło
Oto jak to robię. Musisz pobrać wszystkie nagłówki, jeśli $ nazwa_ nagłówka nie zostanie przekazana:
Wygląda mi to na znacznie prostsze niż większość przykładów podanych w innych odpowiedziach. Pobiera to również metodę (GET / POST / etc.) I identyfikator URI wymagany podczas pobierania wszystkich nagłówków, co może być przydatne, jeśli próbujesz użyć go do logowania.
Oto wynik:
źródło
Oto prosty sposób, aby to zrobić.
źródło
Ten mały fragment kodu PHP może być dla Ciebie pomocny:
źródło
Korzystam z tej funkcji, aby uzyskać niestandardowe nagłówki, jeśli nagłówek zaczyna się od „HTTP_X_”, pchamy tablicę :)
źródło
jeśli do pobrania wymagany jest tylko jeden klucz, na przykład
"Host"
wymagany jest adres, wówczas możemy go użyćAbyśmy mogli uniknąć pętli i umieścić je w linii do wyjść echa
źródło
PHP 7: Operator zerowej koalescencji
źródło
Działa to, jeśli masz serwer Apache
Kod PHP:
Wynik:
źródło