Maison >développement back-end >Problème PHP >Comment implémenter la fonction de distribution de routage d'URL en php
Comment PHP implémente la fonction de distribution de route d'url : Tout d'abord, interceptez le chemin [/router/] dans la configuration du serveur ; puis implémentez le distributeur de route et obtenez l'URI demandé et enfin écrivez le module ;
[Recommandations d'apprentissage associées : Tutoriel graphique php]
Comment implémenter la fonction de distribution de route d'url en PHP :
La première étape consiste à intercepter le chemin /router/
dans la configuration du serveur
Appelez la page index.php
dans un certain répertoire de dossiers. On suppose que tous les modules sont maintenant stockés dans des fichiers séparés dans le répertoire de classe, qui se trouve au même niveau. comme le niveau du routeur, comme le montre la figure ci-dessous :
La deuxième étape est la mise en œuvre du distributeur de routes (index.php)
<!Doctype html> <html> <head> <title>路由测试~~</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php date_default_timezone_set("Asia/Shanghai"); define("MODULE_DIR", "../class/"); $_DocumentPath = $_SERVER['DOCUMENT_ROOT']; $_FilePath = __FILE__; $_RequestUri = $_SERVER['REQUEST_URI']; $_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==>\router\index.php $_UrlPath = $_RequestUri; //==>/router/hello/router/a/b/c/d/abc/index.html?id=3&url=http: $_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath); /** * http://192.168.0.33/router/hello/router/a/b/c/d/abc/index.html?id=3&url=http: * * /hello/router/a/b/c/d/abc/index.html?id=3&url=http: */ for ($i = 0; $i < count($_AppPathArr); $i++) { $p = $_AppPathArr[$i]; if ($p) { $_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1); } } $_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1); $_AppPathArr = explode("/", $_UrlPath); $_AppPathArr_Count = count($_AppPathArr); $arr_url = array( 'controller' => 'index', 'method' => 'index', 'parms' => array() ); $arr_url['controller'] = $_AppPathArr[0]; $arr_url['method'] = $_AppPathArr[1]; if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) { die('参数错误'); } else { for ($i = 2; $i < $_AppPathArr_Count; $i += 2) { $arr_temp_hash = array(strtolower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]); $arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash); } } $module_name = $arr_url['controller']; $module_file = MODULE_DIR.$module_name.'.class.php'; $method_name = $arr_url['method']; if (file_exists($module_file)) { include $module_file; $obj_module = new $module_name(); if (!method_exists($obj_module, $method_name)) { die("要调用的方法不存在"); } else { if (is_callable(array($obj_module, $method_name))) { $obj_module -> $method_name($module_name, $arr_url['parms']); $obj_module -> printResult(); } } } else { die("定义的模块不存在"); } ?> </body> </html>
Récupérez l'uri demandé, puis obtenez Allez au nom du module à charger, au nom de la méthode appelante, et faites un jugement simple sur les paramètres de l'uri...
La troisième étape consiste à écrire le module
Selon l'uri ci-dessus, ce que nous voulons appeler est la méthode routeur sous le module Hello, puis nous pouvons définir un fichier nommé Hello.class.php dans le répertoire de la classe (notez que Linux est sensible à la casse)
<?php class Hello { private $_name; private $_varValue; function __construct() { } function router() { $this->_name = func_get_arg(0); $this->_varValue = func_get_arg(1); } function printResult() { echo $this->_name; echo "<p>"; echo var_dump($this->_varValue); echo "</p>"; } } ?>
De même, nous pouvons écrire le module Ha..
Cela peut être considéré comme réalisant une fonction de distribution de routage d'URL très simple. ..
Recommandations d'apprentissage associées : programmation php( Vidéo)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!