PHP 는 간단 한 url 경로 기능 인 스 턴 스 를 실현 합 니 다.
1.경로 체 제 는 특정한 형식의 URL 구조 에서 시스템 에 대응 하 는 매개 변 수 를 추출 하 는 것 이다.예 를 들 면http://main.test.com/article/1 그 중:/article/1 -> ?_m=article&id=1。
2.그 다음 에 해당 하 는 매개 변 수 를 가 진 URL 을 특정한 형식의 URL 구조 로 전환 하 는 것 은 위의 과정의 역방향 과정 이다.
한 페이지 의 내용 이 나타 나 면 url 에서 전달 하 는 매개 변수 에 따라 렌 더 링 을 해 야 합 니 다.xxx.com/xx?c=x&m=x&t=.
만약 에 우리 가 존재 하지 않 는 게임 응용 프로그램,예 를 들 어 game.weibo.com/ilovecoffee 222 를 방문 하면 다음 과 같은 오류 알림 을 출력 합 니 다
game.weibo.com 뒤에 일치 하 는 항목 은 phop 페이지 를 가리 키 고 매개 변수 에 따라 방문 할 게임 응용 표 지 를 가 져 옵 니 다.나중에 데이터 베이스 나 캐 시 에서 이 응용 표 지 를 조회 하고 존재 하지 않 으 면 오류 알림 을 출력 합 니 다.존재 하면 게임 응용 체인 주 소 를 불 러 옵 니 다.
지금 phop 예 를 들 어 제 ip 이 192.168.0.33 이 라 고 가정 합 니 다.저 는 router 라 는 경 로 를 추가 한 다음 에'/모듈 명/방법 명/매개 변수 1 의 key/매개 변수 1 의 value/...'를 따 릅 니 다.
이러한 주소:
192.168.0.33/router/Hello/router/a/b/c/d/abc/index.html?id=3&url=http:………………
즉,Ha 이 모듈 의 router 방법 을 호출 하고 url 뒤의 매개 변수/a/b/c/d/index 를 입력 하 는 것 입 니 다.
첫 번 째 단 계 는 먼저 서버 설정 에서/router/경 로 를 차단 해 야 합 니 다
폴 더 디 렉 터 리 에 있 는 index.php 페이지 를 호출 합 니 다.현재 모든 모듈 이 클 라 스 디 렉 터 리 에 단독 파일 을 저장 하고 있다 고 가정 하면 이 디 렉 터 리 는 router 와 동급 입 니 다.아래 그림 과 같 습 니 다.
두 번 째 단 계 는 분배 기의 실현(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>
요청 한 uri 를 가 져 오고 불 러 올 모듈 이름,호출 방법 명 을 가 져 와 uri 매개 변 수 를 간단하게 판단 합 니 다.세 번 째 단계,모듈 의 작성
상기 uri 에 따 르 면 Hello 모듈 의 router 방법 을 호출 하려 면 class 디 렉 터 리 에서 Hello.class.php 라 는 파일 을 정의 할 수 있 습 니 다.(Liux 에 서 는 대소 문 자 를 구분 합 니 다)
<?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>";
}
}
?>
마찬가지 로 우 리 는 Ha 모듈 을 작성 할 수 있 습 니 다.간단 한 url 경로 배포 기능 을 실현 한 셈 인 데...
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.