2011-05-04 5 views
2

En ASP.Net nous avons httphandlers qui peut analyser une demande et, par conséquent rediriger l'utilisateur, la plupart du temps nous les utilisons pour réécriture url etc.Avons-nous httphandlers en PHP comme nous l'avons dans ASP.Net

I Je voudrais savoir si nous avons une telle fonctionnalité en PHP, si oui un exemple qui explique ce sera très utile.

Par exemple, si je demande un fichier d'image sur un serveur, je voudrais rediriger vers une page si la demande si du serveur x

Répondre

1

certains des cadres php offrent des fonctionnalités similaires. si vous souhaitez rediriger en php, vous devez définir les en-têtes directement

eg 
header('Location: http://www.invalid.com/newpage.pgp'); 
exit; // make sure to exit or the script will keep executing 

si vous voulez que l'URL en cours etc, vous devez interroger le _SERVER $ var

essayer cela, et voir quelles informations vous pouvez obtenir à partir de votre serveur

var_dump($_SERVER); 
1

Vous devez implémenter votre propre mécanisme ou utiliser un cadre. Les requêtes de Zend Framework passent par un concept similaire mais restent assez différentes des gestionnaires.

3

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.

Questions connexes