This page has been robot translated, sorry for typos if any. Original content here.

Tableau superglobal $ _SERVER

L'un des tableaux prédéfinis les plus importants est le tableau $ _SERVER - l'interpréteur PHP place les variables reçues du serveur dans celui-ci. Sans ces variables, il est difficile d'organiser un support complet pour les applications Web. Voici les éléments les plus importants du tableau superglobal $ _SERVER.

Note:

Vous pouvez voir la liste complète des éléments du tableau $ _SERVER soit en utilisant la fonction print_r (), qui imprime l'image du tableau ou en utilisant la fonction phpinfo (), qui affiche des informations sur l'interpréteur PHP.

$ _SERVER ['DOCUMENT_ROOT']

L'élément $ _SERVER ['DOCUMENT_ROOT'] contient le chemin d'accès au répertoire racine du serveur, si le script s'exécute dans l'hôte virtuel, cet élément spécifie le chemin d'accès au répertoire racine de l'hôte virtuel. Ie. Dans le fichier de configuration httpd.conf, l'hôte virtuel a une directive DocumentRoot définie sur "D: / main", l'élément $ _SERVER ['DOCUMENT_ROOT'] contiendra la valeur "D: main".

Element $ _SERVER ['HTTP_ACCEPT']

L'élément $ _SERVER ['HTTP_ACCEPT'] décrit les préférences du client pour le type de document. Le contenu de cet élément est extrait de l'en-tête HTTP Accept, que le client envoie au serveur. Le contenu de cet en-tête peut ressembler à ceci

image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*

L'en-tête Accept vous permet de spécifier le type de média que le client préfère recevoir en réponse à sa requête. Cet en-tête permet au serveur d'être informé que la réponse est limitée à un petit nombre de types préférés.

Le caractère * est utilisé pour regrouper les types dans une série de médias. Par exemple, le caractère * / * spécifie l'utilisation de tous les types, et le type / * indique l'utilisation de tous les sous-types du type de type sélectionné.

Note:

Les types de support sont séparés les uns des autres par des virgules.

Chaque série de médias est également caractérisée par un ensemble supplémentaire de paramètres. L'un d'eux est le facteur de préférence relative q, qui prend des valeurs de 0 à 1, respectivement, des types moins préférés aux plus préférés. L'utilisation de plusieurs paramètres q permet au client d'indiquer au serveur le degré de préférence relatif pour un type de média particulier.

Note:

Par défaut, le paramètre q est défini sur 1. En outre, il est séparé du type de support par un point-virgule.

Exemple d'un en-tête Accept:

Accept: audio/*; q=0.2, audio/basic

Dans cet en-tête, le premier type est audio / * incluant tous les documents musicaux et caractérisé par un facteur de préférence de 0.2. Le type d'audio / de base est indiqué par une virgule, pour laquelle le facteur de préférence n'est pas spécifié et suppose une valeur par défaut de un. Citant RFC2616 cet en-tête peut être interprété comme suit: "Je préfère le type d'audio / basique, mais je peux aussi envoyer des documents de tout autre type audio, s'ils sont disponibles, après réduction du facteur de préférence de plus de 80%."

L'exemple peut être plus compliqué.

Accept: text/plain; q=0.5, text/html,
text/x-dvi; q=0.8, text/xc

Note:

Notez que l'élément $ _SERVER ['HTTP_ACCEPT'] contient exactement les mêmes informations, mais sans l'en-tête Accept initial.

Cet entête est interprété comme suit: Les types text / html et text / xc sont préférables, mais s'ils ne sont pas disponibles, alors le client envoyant cette requête préfère text / x-dvi, et si ce n'est pas le cas, il peut prendre le type text / x plaine.

Element $ _SERVER ['HTTP_ACCEPT_LANGUAGE']

L'élément $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] décrit les préférences du client pour la langue. Ces informations sont extraites de l'en-tête HTTP Accept-Language, que le client envoie au serveur. Nous pouvons donner l'exemple suivant:

Accept-Language: ru, en; q=0.7

Ce qui peut être interprété comme suit: le client préfère la langue russe, mais en cas d'absence accepte d'accepter les documents en anglais. L'élément $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] contiendra exactement les mêmes informations, mais sans l'en-tête Accept-Language:

ru, en; q=0.7

Le contenu de l'élément $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] peut être utilisé pour déterminer la nationalité des visiteurs. Cependant, les résultats seront approximatifs, car de nombreux utilisateurs utilisent des options de navigateur anglais qui avertiront le serveur que le visiteur préfère une seule langue - l'anglais.

Element $ _SERVER ['HTTP_HOST']

L'élément $ _SERVER ['HTTP_HOST'] contient le nom du serveur, qui, en règle générale, coïncide avec le nom de domaine du site situé sur le serveur. Généralement, le nom spécifié dans ce paramètre est identique à $ _SERVER ['SERVER_NAME']. Le paramètre contient uniquement le nom de domaine sans le nom du protocole (http: //), c'est-à-dire

www.sofftime.ru

Element $ _SERVER ['HTTP_REFERER']

L'élément $ _SERVER ['HTTP_REFERER'] contient l'adresse de la page à partir de laquelle le visiteur est arrivé sur cette page. La transition doit être faite par référence. Créez deux pages index.php et page.php.

Index.php page

<?php
echo "<a href=page.php>Ссылка на страницу PHP</a><br />" ;
echo
"Содержимое $_SERVER['HTTP_REFERER'] - " .
$_SERVER [ 'HTTP_REFERER' ]
?>

Page page.php aura un contenu similaire, mais le lien pointera vers la page index.php.

Page page.php

<?php
echo "<a href=index.php>Ссылка на страницу PHP</a><br />" ;
echo
"Содержимое $_SERVER['HTTP_REFERER'] - " .
$_SERVER [ 'HTTP_REFERER' ]
?>

Lors du passage d'une page à une autre, le lien affichera l'adresse de la page à partir de laquelle la transition a été faite.

Element $ _SERVER ['HTTP_USER_AGENT']

L'élément $ _SERVER ['HTTP_USER_AGENT'] contient des informations sur le type et la version du navigateur et le système d'exploitation du visiteur.

Voici le contenu typique de cette ligne: "Mozilla / 4.0 (compatible, MSIE 6.0, Windows NT 5.1)". La présence de la sous-chaîne "MSIE 6.0" indique que le visiteur navigue sur la page en utilisant Internet Explorer version 6.0. La ligne "Windows NT 5.1" indique que Windows XP est utilisé comme système d'exploitation.

Note:

Pour Windows 2000, l'élément $ _SERVER ['HTTP_USER_AGENT'] ressemble à ceci: "Mozilla / 4.0 (compatible, MSIE 5.01, Windows NT 5.0) ')", tandis que pour Windows XP - "Mozilla / 4.0 (compatible, MSIE 6.0 Windows NT 5.1) ".

Si le visiteur utilise le navigateur Opera, le contenu de $ _SERVER ['HTTP_USER_AGENT'] peut ressembler à ceci: "Mozilla / 4.0 (compatible, MSIE 5.0, Windows 98), Opera 6.04 [ru]". La sous-chaîne "MSIE 6.0" est également présente ici, informant que le navigateur Opera est compatible avec le navigateur Internet Explorer et utilise les mêmes bibliothèques dynamiques Windows. Par conséquent, lors de l'analyse de la chaîne retournée par le navigateur, il faut garder à l'esprit que Internet Explorer contient une chaîne contenant la sous-chaîne "MSIE 6.0" et ne contenant pas la sous-chaîne "Opera". En outre, à partir de cette ligne, vous pouvez conclure que l'utilisateur utilise le système d'exploitation Windows 98.

Note:

L'agent utilisateur Firefox peut ressembler à Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.8) Gecko / 20051111 Firefox / 1.5.

Lorsque vous utilisez le navigateur Netscape, le contenu de l'élément $ _SERVER ['HTTP_USER_AGENT'] peut ressembler à ceci: "Mozilla / 5.0 (X11; U; Linux i686; en-US; rv: 1.4); Gecko / 20030624 Netscape / 7.1." L'accès à ce navigateur peut être déterminé par la présence de la sous-chaîne "Netscape". En outre, vous pouvez découvrir que le visiteur se rend sur Internet en utilisant une version de Linux, avec un noyau optimisé pour Pentium IV, dans l'environnement graphique de X-Window. Ce mécanisme est pratique à utiliser pour collecter des informations statistiques permettant aux concepteurs d'optimiser les pages pour les navigateurs les plus courants.

Element $ _SERVER ['REMOTE_ADDR']

L'élément $ _SERVER ['REMOTE_ADDR'] contient l'adresse IP du client. Lors des tests sur la machine locale - cette adresse sera égale à 127.0.0.1. Toutefois, lors d'un test sur le réseau, la variable renvoie l'adresse IP du client ou le dernier serveur proxy par lequel le client est arrivé sur le serveur. Si le client utilise un serveur proxy, vous pouvez trouver son adresse IP à l'aide de la variable d'environnement HTTP_X_FORWARDED_FOR, qui peut être récupérée à l'aide de la fonction getenv ().

Note:

Les serveurs proxy sont des serveurs intermédiaires spéciaux qui fournissent un type spécial de services: compression du trafic, codage des données, adaptation pour les appareils mobiles, etc. Parmi les nombreux serveurs proxy sont les serveurs proxy anonymes qui vous permettent de masquer la véritable adresse IP du client, ces serveurs ne retournent pas la variable d'environnement HTTP_X_FORWARDED_FOR.

Extraction de la variable d'environnement HTTP_X_FORWARDED_FOR

<?php
echo getenv ( HTTP_X_FORWARDED_FOR );
?>

Element $ _SERVER ['SCRIPT_FILENAME']

L'élément $ _SERVER ['SCRIPT_FILENAME'] place le chemin absolu vers le fichier à partir de la racine du disque. Ainsi, si le serveur exécute un système d'exploitation Windows, ce chemin peut ressembler à "d: main estindex.php", c'est-à-dire le chemin est spécifié à partir du disque, dans le système d'exploitation de type UNIX, le chemin est spécifié depuis le répertoire racine /, par exemple "/var/share/www/test/index.php".

Element $ _SERVER ['SERVER_NAME']

L'élément $ _SERVER ['SERVER_NAME'] contient le nom du serveur, généralement le même que le nom de domaine du site qui s'y trouve. Par exemple,

www.softtime.ru

Le contenu de l'élément $ _SERVER ['SERVER_NAME'] correspond souvent au contenu de l'élément $ _SERVER ['HTTP_HOST']. En plus du nom du serveur, le tableau $ _SERVER superglobal vous permet de connaître un certain nombre de paramètres du serveur, par exemple l'adresse IP du serveur, le port d'écoute, le serveur Web installé et la version du protocole HTTP. Ces informations sont placées dans les éléments $ _SERVER ['SERVER_ADDR'], $ _SERVER ['SERVER_PORT'], $ _SERVER ['SERVER_SOFTWARE'] et $ _SERVER ['SERVER_PROTOCOL'], respectivement. Ce qui suit est un exemple utilisant ces éléments.

Utilisation d'éléments de tableau $ _SERVER

<?php
echo "Имя сервера - " . $_SERVER [ 'SERVER_NAME' ]. "<br />" ;
echo
"IP-адрес сервера - " . $_SERVER [ 'SERVER_ADDR' ]. "<br />" ;
echo
"Порт сервера - " . $_SERVER [ 'SERVER_PORT' ]. "<br />" ;
echo
"Web-сервер - " . $_SERVER [ 'SERVER_SOFTWARE' ]. "<br />" ;
echo
"Версия HTTP-протокола - " . $_SERVER [ 'SERVER_PROTOCOL' ]. "<br />" ;
?>

Element $ _SERVER ['REQUEST_METHOD']

L'élément $ _SERVER ['REQUEST_METHOD'] contient la méthode de requête, qui est utilisée pour appeler le script: GET ou POST.

<?php
echo $_SERVER [ 'REQUEST_METHOD' ]; // GET
?>

Element $ _SERVER ['QUERY_STRING']

L'élément $ _SERVER ['QUERY_STRING'] est entré les paramètres passés au script, si la chaîne de requête est une adresse

http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512

alors l'élément $ _SERVER ['QUERY_STRING'] obtiendra tout le texte après le signe "?". Par exemple, lorsque vous accédez au script présenté ci-dessous, placez dans la chaîne de requête tout texte après le "?" nous obtenons une page avec le texte entré.

<?php
echo $_SERVER [ 'QUERY_STRING' ]; // id=1&test=wet&id_theme=512
?>

Element $ _SERVER ['PHP_SELF']

L'élément $ _SERVER ['PHP_SELF'] contient le nom du script, en commençant par le répertoire racine de l'hôte virtuel, c'est-à-dire si la chaîne de requête est une adresse

http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512

alors l'élément $ _SERVER ['PHP_SELF'] contiendra le fragment "/test/index.php". Généralement, le même fragment est placé dans l'élément $ _SERVER ['SCRIPT_NAME'].

Element $ _SERVER ['REQUEST_URI']

L'élément $ _SERVER ['REQUEST_URI'] contient le nom du script, en commençant par le répertoire racine de l'hôte virtuel et les paramètres, c'est-à-dire si la chaîne de requête est une adresse:

http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512

alors l'élément $ _SERVER ['REQUEST_URI'] contiendra le fragment "/test/index.php?id=1&test=wet&id_theme=512". Afin de restaurer l'adresse complète dans le script, qui est placé dans la chaîne de requête, il suffit d'utiliser la combinaison d'éléments du tableau $ _SERVER, présentée ci-dessous

Adresse complète du script

<?php
echo "http://" . $_SERVER [ 'SERVER_NAME' ]. $_SERVER [ 'REQUEST_URI' ];
?>


1
178.20.156.230, 178.20.156.230, 66.102.9.134www.shram.kiev.uawww.shram.kiev.uahttp: //www.shram.kiev.ua/site/server.shtml
array (36) {["REDIRECT_gzip-only-text / html"] => chaîne (1) "1" ["REDIRECT_RF"] => chaîne (39) "/home/admin/data/www/shram.kiev. ua / site "[" REDIRECT_STATUS "] => string (3)" 200 "[" gzip-only-text / html "] => chaîne (1)" 1 "[" HTTP_HOST "] => chaîne (17)" www.shram.kiev.ua "[" HTTP_X_FORWARDED_FOR "] => chaîne (44)" 178.20.156.230, 178.20.156.230, 66.102.9.134 "[" HTTP_X_FORWARDED_PROTO "] => chaîne (4)" http "[" HTTP_X_REAL_IP " ] => string (12) "66.102.9.134" ["HTTP_CONNECTION"] => chaîne (5) "close" ["HTTP_ACCEPT"] => chaîne (3) "* / *" ["HTTP_ACCEPT_CHARSET"] => chaîne (7) "utf-8, *" ["HTTP_VIA"] => chaîne (34) "1.0 translate.google.com TWSFE / 0.9" ["HTTP_USER_AGENT"] => chaîne (60) "Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1), gzip (gfe) "[" HTTP_ACCEPT_ENCODING "] => chaîne (15)" gzip, deflate, br "[" CHEMIN "] => chaîne (29)" / sbin: / bin: / usr / sbin: / usr / bin "[" SERVER_SIGNATURE "] => chaîne (120)"
Apache / 2.2.24 (FreeBSD) mod_python / 3.3.1 Serveur Python / 2.7.5 PHP / 5.4.15 sur www.shram.kiev.ua Port 80
"[" SERVER_SOFTWARE "] => chaîne (64)" Apache / 2.2.24 (FreeBSD) mod_python / 3.3.1 Python / 2.7.5 PHP / 5.4.15 "[" SERVER_NAME "] => chaîne (17)" www .shram.kiev.ua "[" SERVER_ADDR "] => chaîne (14)" 178.20.156.230 "[" SERVER_PORT "] => chaîne (2)" 80 "[" REMOTE_ADDR "] => chaîne (14)" 178.20 .156.230 "[" DOCUMENT_ROOT "] => chaîne (34)" /home/admin/data/www/shram.kiev.ua "[" SERVER_ADMIN "] => chaîne (23)" webmaster@shram.kiev.ua " ["SCRIPT_FILENAME"] => chaîne (44) "/home/admin/data/www/shram.kiev.ua/index.php" ["REMOTE_PORT"] => chaîne (5) "49429" ["REDIRECT_QUERY_STRING"] => chaîne (34) "& MY_REQUEST_URI = / site / serveur.shtml" ["REDIRECT_URL"] => chaîne (18) "/site/server.shtml" ["GATEWAY_INTERFACE"] => chaîne (7) "CGI / 1.1 "[" SERVER_PROTOCOL "] => chaîne (8)" HTTP / 1.0 "[" REQUEST_METHOD "] => chaîne (3)" GET "[" QUERY_STRING "] => chaîne (34)" & MY_REQUEST_URI = / site / server. shtml "[" REQUEST_URI "] => chaîne (18)" /site/server.shtml "[" SCRIPT_NAME "] => chaîne (10)" /index.php "[" PHP_SELF "] => chaîne (10)" /index.php "[" REQUEST_TIME_FLOAT "] => float (1524 545956.646) ["REQUEST_TIME"] => int (1524545956)}
1.0 translate.google.com TWSFE / 0.9


NO