SI : vous n'avez besoin que d'un seul en-tête, au lieu de tous les en- têtes, la méthode la plus rapide est:
<?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 : vous exécutez PHP en tant que module Apache ou, à partir de PHP 5.4, en utilisant FastCGI (méthode simple):
apache_request_headers ()
<?php
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ELSE: Dans tous les autres cas, vous pouvez utiliser (implémentation de l'espace utilisateur):
<?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";
}
Voir aussi :
getallheaders () - (PHP> = 5.4) édition multiplateforme Alias de apache_request_headers()
apache_response_headers () - Récupère tous les en-têtes de réponse HTTP.
headers_list () - Récupère une liste des en-têtes à envoyer.
RFC3875 , 4.1.18:
la source
$_SERVER
variable? La documentation PHP à php.net/manual/en/reserved.variables.server.php est évasive sur ce que nous pouvons être sûrs qu'il y aura.cache-control
tête, mais je ne le vois nulle part$_SERVER
. Je vois plusieurs en-têtes préfixésHTTP_
, y compris "HTTP_ACCEPT" et "HTTP_UPGRADE_INSECURE_REQUESTS" et "HTTP_USER_AGENT" (parmi plusieurs autres). Mais rien pour "cache-control" rien pour "pragma". Ceci indépendamment de la casse ou duHTTP_
préfixe. Suis-je en train de manquer quelque chose?_SERVER["HTTP_CACHE_CONTROL"] max-age=0
Vous devriez trouver tous les en-têtes HTTP dans la
$_SERVER
variable globale préfixée avecHTTP_
majuscule et avec tirets (-) remplacés par des traits de soulignement (_).Par exemple, vous
X-Requested-With
pouvez le trouver dans:Il peut être pratique de créer un tableau associatif à partir de la
$_SERVER
variable. Cela peut être fait dans plusieurs styles, mais voici une fonction qui génère des clés en forme de chameau:Maintenant, utilisez simplement
$headers['XRequestedWith']
pour récupérer l'en-tête souhaité.Manuel PHP sur
$_SERVER
: http://php.net/manual/en/reserved.variables.server.phpla source
parseRequestHeaders()
fonction. Si un tel tableau associatif est nécessaire, alors IMO, la fonction apache est la meilleure option, car elle retourne exactement les en-têtes reçus au lieu d'une version CamelCase déformée. (Notez également qu'à partir de PHP 5.4, il n'est plus uniquement Apache.)apache_request_headers()
ougetallheaders()
ne semble pas mettre en majuscule les noms d'en-tête lorsque j'ai testé. Ils reviennent exactement comme je passe du côté client. Alors pourquoi capitalisez-vous les noms d'en-tête dans une telle fonction de remplacement?Depuis PHP 5.4.0, vous pouvez utiliser une
getallheaders
fonction qui retourne tous les en-têtes de demande sous forme de tableau associatif:Auparavant, cette fonction ne fonctionnait que lorsque PHP s'exécutait en tant que module Apache / NSAPI.
la source
strtolower
fait défaut dans plusieurs des solutions proposées, la RFC2616 (HTTP / 1.1) définit les champs d'en-tête comme des entités insensibles à la casse. Le tout, pas seulement la partie valeur .Par conséquent, des suggestions telles que l'analyse syntaxique des entrées HTTP_ sont fausses.
Mieux serait comme ça:
Notez les différences subtiles avec les suggestions précédentes. La fonction ici fonctionne également sur php-fpm (+ nginx).
la source
Date
tête - et que "les valeurs des paramètres [texte dans Content-Type après le point-virgule] peuvent ou non être sensibles à la casse". Donc, étant donné qu'il existe au moins deux en-têtes avec des valeurs sensibles à la casse, il semble que vous vous trompiez.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.
Je suppose donc que vous vous trompez.Passez un nom d'en-tête à cette fonction pour obtenir sa valeur sans utiliser de
for
boucle. Renvoie null si l'en-tête n'est pas trouvé.Remarque: cela ne fonctionne qu'avec le serveur Apache, voir: http://php.net/manual/en/function.getallheaders.php
Remarque: cette fonction traitera et chargera tous les en-têtes dans la mémoire et elle est moins performante qu'une
for
boucle.la source
Pour simplifier les choses, voici comment obtenir celle que vous souhaitez:
Facile:
ou lorsque vous devez en obtenir un à la fois:
Les autres en-têtes sont également dans le tableau super global $ _SERVER, vous pouvez lire comment les obtenir ici: http://php.net/manual/en/reserved.variables.server.php
la source
HTTP_
pas le$headerKey
J'utilisais CodeIgniter et j'ai utilisé le code ci-dessous pour l'obtenir. Peut être utile pour quelqu'un à l'avenir.
la source
Voici comment je le fais. Vous devez obtenir tous les en-têtes si $ header_name n'est pas transmis:
Cela me semble beaucoup plus simple que la plupart des exemples donnés dans d'autres réponses. Cela obtient également la méthode (GET / POST / etc.) Et l'URI demandés lors de l'obtention de tous les en-têtes, ce qui peut être utile si vous essayez de l'utiliser dans la journalisation.
Voici la sortie:
la source
Voici un moyen simple de le faire.
la source
Ce petit extrait PHP peut vous être utile:
la source
J'utilise cette fonction pour obtenir les en-têtes personnalisés, si l'en-tête commence à partir de "HTTP_X_" nous poussons dans le tableau :)
la source
si une seule clé est requise pour être récupérée, par exemple une
"Host"
adresse est requise, alors nous pouvons utiliserAfin que nous puissions éviter les boucles et les mettre en ligne sur les sorties d'écho
la source
PHP 7: Opérateur Null Coalesce
la source
Cela fonctionne si vous avez un serveur Apache
Code PHP:
Résultat:
la source