PHP 는 간단 한 url 경로 기능 인 스 턴 스 를 실현 합 니 다.

5323 단어 phpurl
phop 의 경로 메커니즘 이란 무엇 입 니까?
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 경로 배포 기능 을 실현 한 셈 인 데...
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기