IF : Sie benötigen nur einen einzigen Header. Anstelle aller Header ist die schnellste Methode:
<?php
// Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_')
$headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX'];
SONST WENN : Sie führen PHP als Apache-Modul oder ab PHP 5.4 mit FastCGI (einfache Methode) aus:
apache_request_headers ()
<?php
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ELSE: In jedem anderen Fall können Sie Folgendes verwenden (Userland-Implementierung):
<?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";
}
Siehe auch :
getallheaders () - (PHP> = 5.4) plattformübergreifende Edition Alias von apache_request_headers()
apache_response_headers () - Ruft alle HTTP- Antwortheader ab .
headers_list () - Ruft eine Liste der zu sendenden Header ab.
RFC3875 , 4.1.18:
quelle
$_SERVER
Variable einfügt? Die PHP-Dokumentation unter php.net/manual/en/reserved.variables.server.php weicht aus, was wir sicher sein können, dass es dort sein wird.cache-control
Header, aber ich sehe ihn nirgendwo in$_SERVER
. Ich sehe mehrere Header mit dem PräfixHTTP_
"HTTP_ACCEPT", "HTTP_UPGRADE_INSECURE_REQUESTS" und "HTTP_USER_AGENT" (unter anderem). Aber nichts für "Cache-Kontrolle", auch nichts für "Pragma". Dies ist unabhängig von Groß- und Kleinschreibung oderHTTP_
Präfix. Vermisse ich etwas_SERVER["HTTP_CACHE_CONTROL"] max-age=0
Sie sollten alle HTTP-Header in der
$_SERVER
globalen Variablen finden, derHTTP_
Großbuchstaben vorangestellt sind und durch Bindestriche (-) ersetzt werden, die durch Unterstriche (_) ersetzt werden.Zum Beispiel finden Sie Ihre
X-Requested-With
in:Es kann zweckmäßig sein, aus der
$_SERVER
Variablen ein assoziatives Array zu erstellen . Dies kann in verschiedenen Stilen erfolgen, aber hier ist eine Funktion, die Kamelschlüssel ausgibt:Verwenden Sie jetzt einfach
$headers['XRequestedWith']
, um den gewünschten Header abzurufen.PHP-Handbuch unter
$_SERVER
: http://php.net/manual/en/reserved.variables.server.phpquelle
parseRequestHeaders()
Funktion zu ermitteln. Wenn ein solches assoziatives Array benötigt wird, ist IMO die Apache-Funktion die beste Option, da sie genau die empfangenen Header anstelle einer verstümmelten CamelCase-Version zurückgibt. (Beachten Sie auch, dass es ab PHP 5.4 nicht mehr nur Apache ist.)apache_request_headers()
odergetallheaders()
scheint die Header-Namen beim Testen nicht groß zu schreiben. Sie kehren genau so zurück, wie ich von der Client-Seite komme. Warum setzen Sie dann Headernamen in einer solchen Ersetzungsfunktion groß?Seit PHP 5.4.0 können Sie eine
getallheaders
Funktion verwenden, die alle Anforderungsheader als assoziatives Array zurückgibt:Früher funktionierte diese Funktion nur, wenn PHP als Apache / NSAPI-Modul ausgeführt wurde.
quelle
strtolower
Da in mehreren der vorgeschlagenen Lösungen RFC2616 (HTTP / 1.1) fehlt, werden Headerfelder als Entitäten definiert, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. Das Ganze, nicht nur der Wert .Vorschläge wie das Parsen von HTTP_- Einträgen sind also falsch.
Besser wäre so:
Beachten Sie die subtilen Unterschiede zu früheren Vorschlägen. Die Funktion funktioniert hier auch mit php-fpm (+ nginx).
quelle
Date
Header - und dass "Parameterwerte [Text in Inhaltstyp nach Semikolon] möglicherweise zwischen Groß- und Kleinschreibung unterscheiden oder nicht". Angesichts der Tatsache, dass es mindestens zwei Header mit Werten gibt, bei denen zwischen Groß- und Kleinschreibung unterschieden wird, scheinen Sie sich zu irren.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.
Also ich denke du liegst falsch.Übergeben Sie dieser Funktion einen Headernamen, um den Wert ohne Verwendung der
for
Schleife abzurufen. Gibt null zurück, wenn der Header nicht gefunden wurde.Hinweis: Dies funktioniert nur mit Apache-Servern, siehe: http://php.net/manual/en/function.getallheaders.php
Hinweis: Diese Funktion verarbeitet und lädt alle Header in den Speicher und ist weniger performant als eine
for
Schleife.quelle
Um die Sache zu vereinfachen, können Sie wie folgt genau das bekommen, was Sie wollen:
Einfach:
oder wenn Sie einen nach dem anderen benötigen:
Die anderen Header befinden sich ebenfalls im superglobalen Array $ _SERVER. Informationen dazu finden Sie hier: http://php.net/manual/en/reserved.variables.server.php
quelle
HTTP_
$headerKey
Ich habe CodeIgniter verwendet und den folgenden Code verwendet, um ihn abzurufen. Kann in Zukunft für jemanden nützlich sein.
quelle
Hier ist, wie ich es mache. Sie müssen alle Header abrufen, wenn $ header_name nicht übergeben wird:
Es sieht für mich viel einfacher aus als die meisten Beispiele in anderen Antworten. Dadurch werden auch die Methode (GET / POST / etc.) Und die angeforderte URI abgerufen, wenn alle Header abgerufen werden. Dies kann hilfreich sein, wenn Sie versuchen, sie für die Protokollierung zu verwenden.
Hier ist die Ausgabe:
quelle
Hier ist eine einfache Möglichkeit, dies zu tun.
quelle
Dieses kleine PHP-Snippet kann für Sie hilfreich sein:
quelle
Ich benutze diese Funktion, um die benutzerdefinierten Header zu erhalten. Wenn der Header von "HTTP_X_" ausgeht, drücken wir das Array ein :)
quelle
Wenn zum Abrufen nur ein Schlüssel erforderlich ist, z. B. eine
"Host"
Adresse, können wir verwendenDamit wir Schleifen vermeiden und in die Echoausgänge einbinden können
quelle
PHP 7: Null-Koaleszenz-Operator
quelle
Dies funktioniert, wenn Sie einen Apache-Server haben
PHP-Code:
Ergebnis:
quelle