Heim > Backend-Entwicklung > PHP-Tutorial > php url伪静态弥合析

php url伪静态弥合析

WBOY
Freigeben: 2016-06-13 13:08:18
Original
930 Leute haben es durchsucht

php url伪静态化解析

1、大家来说说URL映射吧
? ?一般url映射有两种方式,一种是通过mod_rewrite实现,这种网上教材很多我也不多说了。另外一种是在程序中模拟,比如类似zend Framework中的那种方式/index.php/controller/action/var1/value1/var2/value2/。这里方 式其实最主要是通过一个统一的输入接口,然后对url进行解析,最后转发到相应的controller中的module。

? ? 我这里写了两个简单函数来模拟。
? ? 第一个函数主要是进行地址解析,把类似/index.php/controller/action/var1/value1/var2/value2/的地址解析出来,一般来说要解析成三部分:controller,module,params。

<?php /**
 *对url路由进行简单的解析,支持对/path/to/site/index.php/module/action/parm/value
 * /path/to/site/index.php?/module/action/parm/value和
 * /path/to/site/?/module/action/parm/value三种形式的处理
 *@param:null
 *@return:router array
 */
function url_router() {
	$path = strip_tags ( $_SERVER ['REQUEST_URI'] );
	$strpos = strpos ( $path, '.php' );
	if ($strpos) {
		$path = substr ( $path, $strpos + 4 );
	} else {
		if (empty ( $_SERVER ['QUERY_STRING'] )) {
			$strpos = strpos ( $path, '?' );
			if ($strpos) {
				$path = substr ( $path, $strpos + 1 );
			} else {
				$path = '';
			}
		} else {
			$path = $_SERVER ['QUERY_STRING'];
		}
	}
	//统一化$path的格式,如果$path的第一个字符为/则去掉
	if ($path [0] == '/') {
		$path = substr ( $path, 1 );
	}
	//解析,并且路由
	if (! empty ( $path )) {
		$path = explode ( '/', $path );
		$router ['controller'] = $path [0];
		$router ['action'] = (! empty ( $path [1] )) ? $path [1] : 'index';
		//print_r($path);
		for($i = 2; $i < sizeof ( $path ); $i = $i + 2) {
			$params [$path [$i]] = (isset ( $path [$i + 1] )) ? $path [$i + 1] : '';
		}
		$router ['params'] = $params;
	} else {
		//默认路由信息
		$router ['controller'] = 'index';
		$router ['action'] = 'index';
		$router ['params'] = array ();
	}
	return $router;
}
?> 
Nach dem Login kopieren

这里就完成主要的url解析功能,然后是转发映射,下面这个函数实现(注意这个函数的实现是结合了我自己的架构,所以你采用的话需要相应的修改,当然你的MVC如果类似zend Framework,那应该要该的不多。)

<?php function url_dispatch($router, $app_path = '/app/controllers/') {
	require_once (SERVER_PATH . '/libs/controller.class.php');
	$controller = $router ['controller'] . 'Controller';
	//echo SERVER_PATH.$app_path.$controller.'.class.php';
	if (! file_exists ( SERVER_PATH . $app_path . $controller . '.class.php' ))
		die ( '缺少必要的类!' );
	require_once (SERVER_PATH . $app_path . $controller . '.class.php');
	$controller = new $controller ();
	$controller->_setParam ( $router ['params'] );
	$controller->{$router ['action'] . 'Action'} ();
	return true;
}
?> 
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage