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 y insère les variables reçues du serveur. Sans ces variables, il est difficile d'organiser une prise en charge complète des applications Web. Vous trouverez ci-dessous une description des éléments les plus importants du tableau superglobal $ _SERVER.

Note

Vous pouvez afficher la liste complète des éléments du tableau $ _SERVER à l’aide de la fonction print_r (), qui affiche une image du tableau, ou de la fonction phpinfo (), qui affiche des informations sur l’interpréteur PHP.

Elément $ _SERVER ['DOCUMENT_ROOT']

L'élément $ _SERVER ['DOCUMENT_ROOT'] contient le chemin d'accès au répertoire racine du serveur; si le script est exécuté sur un hôte virtuel, cet élément indique le chemin d'accès au répertoire racine de l'hôte virtuel. C'est à dire dans le fichier de configuration httpd.conf, l'hôte virtuel a la directive DocumentRoot, à laquelle est attribuée la valeur "D: / main", l'élément $ _SERVER ['DOCUMENT_ROOT'] contiendra la valeur "D: main".

Elément $ _SERVER ['HTTP_ACCEPT']

L'élément $ _SERVER ['HTTP_ACCEPT'] décrit les préférences du client concernant le type de document. Le contenu de cet élément est extrait de l'en-tête Accept HTTP envoyé par le client au serveur. Le contenu de ce titre 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 support que le client préfère recevoir en réponse à sa demande. 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 symbole * est utilisé pour regrouper des types dans une ligne multimédia. Par exemple, le symbole * / * spécifie l'utilisation de tous les types et la désignation type / * définit l'utilisation de tous les sous-types du type sélectionné.

Note

Les types de média sont séparés par des virgules.

Chaque ligne de support est également caractérisée par un ensemble supplémentaire de paramètres. L'un d'eux est ce qu'on appelle le coefficient de préférence relative q, qui prend les valeurs de 0 à 1, respectivement, des types les moins préférés aux plus préférés. L’utilisation de plusieurs paramètres permet au client d’informer le serveur du degré de préférence relatif d’un type de support donné.

Note

Par défaut, le paramètre q prend la valeur 1. De plus, il est séparé du type de support par un point-virgule.

Exemple d'en-tête de type d'acceptation:

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

Dans ce titre, le premier type est audio / *, qui inclut tous les documents musicaux et se caractérise par un rapport de préférence de 0,2. Une virgule indique le type d'audio / base pour lequel le coefficient de préférence n'est pas spécifié et accepte une valeur par défaut de un. En citant la RFC2616, cet en-tête peut être interprété comme suit: «Je préfère le type audio / de base, mais je peux également envoyer des documents de tout autre type audio, s'ils sont disponibles, après réduction du taux de préférence de plus de 80%."

Un 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 en-tête est interprété comme suit: Les types de document text / html et text / xc sont préférés, mais s’ils ne sont pas disponibles, le client qui envoie cette demande préférera text / x-dvi, et sinon, il peut accepter le texte / type. simple.

Elément $ _SERVER ['HTTP_ACCEPT_LANGUAGE']

L'élément $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] décrit les préférences du client concernant la langue. Ces informations sont extraites de l'en-tête HTTP Accept-Language, qui est envoyé par le client au serveur. Vous pouvez 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, il accepte 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. Toutefois, les résultats seront approximatifs, car de nombreux utilisateurs utilisent des versions anglaises des navigateurs qui informeront le serveur que le visiteur préfère une seule langue: l'anglais.

Elément $ _SERVER ['HTTP_HOST']

L'élément $ _SERVER ['HTTP_HOST'] contient le nom du serveur, qui est généralement le même que le nom de domaine du site situé sur le serveur. En règle générale, le nom spécifié dans ce paramètre est identique à $ _SERVER ['SERVER_NAME']. Le paramètre contient uniquement le nom de domaine sans nom de protocole (http: //), c.-à-d.

www.sofftime.ru

Elément $ _SERVER ['HTTP_REFERER']

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

Page index.php

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

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

Page.php

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

Lorsque vous passez d'une page à une autre, le lien vers la page à partir de laquelle la transition a été effectuée sera affiché sous le lien.

Elément $ _SERVER ['HTTP_USER_AGENT']

L'élément $ _SERVER ['HTTP_USER_AGENT'] contient des informations sur le type et la version du navigateur, ainsi que sur 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" signifie que le visiteur visualise la page à l'aide d'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'] se présente comme suit: "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 Opera, alors le contenu de $ _SERVER ['HTTP_USER_AGENT'] pourrait 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, indiquant que le navigateur d'Opera est compatible avec Internet Explorer et utilise les mêmes bibliothèques dynamiques Windows. Par conséquent, lors de l'analyse de la chaîne renvoyée par le navigateur, il convient de garder à l'esprit qu'Internet Explorer inclut une chaîne contenant la sous-chaîne "MSIE 6.0" et ne contenant pas la sous-chaîne "Opera". De plus, à partir de cette ligne, nous pouvons conclure que l'utilisateur utilise le système d'exploitation Windows 98.

Note

L'agent utilisateur du navigateur Firefox peut se présenter comme suit: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; version: 1.8) Gecko / 20051111 Firefox / 1.5.

Lorsque vous utilisez le navigateur Netscape, le contenu de l'élément $ _SERVER ['HTTP_USER_AGENT'] pourrait ressembler à ceci: "Mozilla / 5.0 (X11; U; Linux i686; en-US; vr: 1.4) Gecko / 20030624 Netscape / 7.1". L'appartenance à ce navigateur peut être identifiée par la présence de la sous-chaîne "Netscape". De plus, vous pouvez savoir que le visiteur accède à Internet à l'aide de la version d'exploitation de Linux, le noyau optimisé pour Pentium IV étant intégré à l'interface graphique X-Window. Ce mécanisme est pratique à utiliser pour collecter des informations statistiques, ce qui permet aux concepteurs d’optimiser les pages pour les navigateurs les plus courants.

Elément $ _SERVER ['REMOTE_ADDR']

L'élément $ _SERVER ['REMOTE_ADDR'] contient l'adresse IP du client. Lors des tests sur une machine locale, cette adresse sera 127.0.0.1. Toutefois, lors des tests sur un réseau, la variable renverra l'adresse IP du client ou du dernier serveur proxy par lequel le client a atteint le serveur. Si le client utilise un serveur proxy, son adresse IP peut être obtenue à l'aide de la variable d'environnement HTTP_X_FORWARDED_FOR, dont la valeur peut être obtenue à l'aide de la fonction getenv ().

Note

Les serveurs proxy sont des serveurs intermédiaires spéciaux qui fournissent un type de service particulier: compression du trafic, codage des données, adaptation aux appareils mobiles, etc. Parmi les nombreux serveurs proxy, il existe des serveurs proxy anonymes, qui vous permettent de masquer l'adresse IP réelle du client. De tels serveurs ne renvoient 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 );
?>

Elément $ _SERVER ['SCRIPT_FILENAME']

L'élément $ _SERVER ['SCRIPT_FILENAME'] contient le chemin absolu du fichier depuis la racine du disque. Ainsi, si le serveur est exécuté sous le système d’exploitation Windows, un tel chemin pourrait alors ressembler à "d: main estindex.php", c.-à-d. le chemin est spécifié à partir du disque; dans un système d'exploitation de type UNIX, il est spécifié à partir du répertoire racine /, par exemple "/var/share/www/test/index.php".

Elément $ _SERVER ['SERVER_NAME']

L'élément $ _SERVER ['SERVER_NAME'] contient le nom du serveur, qui correspond généralement au nom de domaine du site situé sur celui-ci. 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']. Outre le nom du serveur, la baie $ _SERVER superglobal vous permet de connaître un certain nombre de paramètres de serveur, tels que 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. Voici un exemple utilisant ces éléments.

Utilisation des éléments du 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 />" ;
?>

Elément $ _SERVER ['REQUEST_METHOD']

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

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

Elément $ _SERVER ['QUERY_STRING']

L'élément $ _SERVER ['QUERY_STRING'] contient les paramètres transmis 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'] contiendra tout le texte après le "?". Par exemple, lorsque vous vous référez au script ci-dessous, placez du texte arbitraire dans la chaîne de requête après le "?" récupère la page avec le texte saisi.

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

L'élément $ _SERVER ['PHP_SELF']

L'élément $ _SERVER ['PHP_SELF'] contient le nom du script, à partir du 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". En règle générale, le même fragment est placé dans l'élément $ _SERVER ['SCRIPT_NAME'].

Elément $ _SERVER ['REQUEST_URI']

L'élément $ _SERVER ['REQUEST_URI'] contient le nom du script, en partant du répertoire racine de l'hôte virtuel et des paramètres, c'est-à-dire. si la chaîne de requête est l'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 des éléments du tableau $ _SERVER présenté ci-dessous.

Adresse complète au script

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


1
178.20.157.4, 178.20.157.4, 66.102.9.150www.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 (42) "/ var / www / admin / data / www / shram. kiev.ua/site "[" REDIRECT_STATUS "] => string (3)" 200 "[" gzip-only-text / html "] => string (1)" 1 "[" HTTP_HOST "] => string (17 ) "www.shram.kiev.ua" ["HTTP_X_FORWARDED_FOR"] => chaîne (40) "178.20.157.4, 178.20.157.4, 66.102.9.150" ["HTTP_X_FORWARDED_PROTO"] => chaîne (4) "http" [" HTTP_X_REAL_IP "] => string (12)" 66.102.9.150 "[" HTTP_CONNECTION "] => string (5)" close "[" HTTP_ACCEPT "] => string (3)" * / * "[" HTTP_ACCEPT_CHARSET "] = > string (7) "utf-8, *" ["HTTP_VIA"] => string (34) "1.0 translate.google.com TWSFE / 0.9" ["HTTP_USER_AGENT"] => string (60) "Mozilla / 4.0 ( compatible; MSIE 6.0; Windows NT 5.1), gzip (gfe) "[" HTTP_ACCEPT_ENCODING "] => string (15)" gzip, deflate, br "[" PATH "] => string (28)" / usr / local / bin: / usr / bin: / bin "[" SERVER_SIGNATURE "] => chaîne (78)"
Serveur Apache / 2.2.22 (Debian) sur www.shram.kiev.ua Port 80
"[" SERVER_SOFTWARE "] => string (22)" Apache / 2.2.22 (Debian) "[" SERVER_NAME "] => string (17)" www.shram.kiev.ua "[" SERVER_ADDR "] => string (12) "178.20.157.4" ["SERVER_PORT"] => chaîne (2) "80" ["REMOTE_ADDR"] => chaîne (12) "66.102.9.150" ["DOCUMENT_ROOT"] => chaîne (37) " /var/www/admin/data/www/shram.kiev.ua "[" SERVER_ADMIN "] => chaîne (23)" webmaster@shram.kiev.ua "[" SCRIPT_FILENAME "] => chaîne (47)" / var / www / admin / data / www / shram.kiev.ua / index.php "[" REMOTE_PORT "] => string (5)" 58642 "[" REDIRECT_QUERY_STRING "] => string (34)" & MY_REQUEST_URI = / site /server.shtml "[" REDIRECT_URL "] => string (18)" /site/server.shtml "[" GATEWAY_INTERFACE "] => string (7)" CGI / 1.1 "[" SERVER_PROTOCOL "] => string (8 ) "HTTP / 1.0" ["REQUEST_METHOD"] => string (3) "GET" ["QUERY_STRING"] => string (34) "& MY_REQUEST_URI = / site / server.shtml" ["REQUEST_URI"] => string ( 18) "/site/server.shtml" ["SCRIPT_NAME"] => string (10) "/index.php" ["PHP_SELF"] => string (10) "/index.php" ["REQUEST_TIME_FLOAT"] = > float (1539615634.077) ["REQUEST_TIME"] => int (15396 15634)}
1.0 translate.google.com TWSFE / 0.9


NON