Si je comprends bien HTTPHandlers, cela est généralement fait par un peu de ruse. Évidemment toute requête qui arrive sur un serveur web (IIS, Apache, etc.) Va essayer de faire correspondre un fichier.
GET /index.php HTTP 1.1
Cette demande atteindra le fichier index.php
, PHP traitera ce fichier, et la réponse sera envoyée au client. Évidemment, le client verra quelle que soit la sortie produite par PHP. HTTPHandlers fonctionne en voyant la requête entrante et en mappant cette requête à un segment de code (peut-être une fonction), mais il a le luxe de dire au serveur Web comment un client doit accéder à ce code via la configuration.
Ce qui suit est an example borrowed from microsoft qui illustre le mappage.
<httpHandlers>
<add verb="*" path="*.sync" type="MyHandler.SyncHandler, MyHandler" />
</httpHandlers>
En PHP, ceci peut être fait en deux étapes. Tout d'abord, le serveur web doit router toutes les requêtes vers un seul fichier PHP. Et en second lieu, ce fichier PHP doit diriger le flux du programme.
Dans Apache, vous pouvez configurer le bit de routage avec un fichier .htaccess
à la racine de votre site Web. Ce example acheminera tout ce qui n'existe pas sur le disque à index.php
. De là, PHP a juste besoin de savoir quelle URL l'utilisateur cherchait, et décider quoi faire. Cela peut être fait en utilisant la valeur REQUEST_URI
transmise par Apache.
$_SERVER['REQUEST_URI'];
Ainsi, si un utilisateur demande:
GET /profile/settings HTTP 1.1
REQUEST_URI
serait:
$url = $_SERVER['REQUEST_URI'];
echo $url; // => "/index.php/profile/settings"
Au-delà, une personne pourrait appliquer une regex à REQUEST_URI
et basculer entre un certain nombre de fonctions pour gérer la demande.