1. 程式人生 > >URL對映 php 實現

URL對映 php 實現

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。

<?
/**
  *對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;
}
?>

    這裡就完成主要的url解析功能,然後是轉發對映,下面這個函式實現(注意這個函式的實現是結合了我自己的架構,所以你採用的話需要相應的修改,當然你的MVC如果類似zend Framework,那應該要該的不多。)

<?
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;
}
?>
 

相關推薦

URL對映 php 實現

1、大家來說說URL對映吧    一般url對映有兩種方式,一種是通過mod_rewrite實現,這種網上教材很多我也不多說了。另外一種是在程式中模擬,比如類似zend Framework中的那種方式/index.php/controller/action/var1/valu

PHP實現URL長連接轉短連接方法總結

inno class data hash nginx服務器 () 屬於 oca str 短鏈接,通俗來說,就是將長的URL 網址,通過程序計算等方式,轉換為簡短的網址字符串。 這樣的話其好處為:1、內容需要;2、用戶友好;3、便於管理。 實現短網址(short URL)

關於requestMapping 進行url對映實現小小知識點 以及如何獲取請求的url中的引數

requstMapping 用來處理url對映  可以作用在controller類上  也可以作用在方法上 經常使用的方式  通過接收一種對映關係 @RequestMapping("/deleteMainMultipleMessages") public

nginx 配置URL重寫(實現隱藏index.php

正則方式: location / { root html/xxxx/yyyy/; index index.php index.html; if ( !-e $request_filename ){ rewrite(.*) /index.php/$1; }

基於Springboot框架 web專案 真實路徑對映到虛擬url路徑的實現

最近有一個需求 前提是很不靠譜的需求 最後一定會刪掉重做的 但是要現在湊合用的  就是用springboot的框架 搭建的一個web專案 因為springboot是自帶tomcat的 所以會打包成jar包 放到伺服器上部署 問題就是說 我們需要在伺服器上 建立一個資料夾 來存放

ASP.NET實現URL對映的方法

URL對映是ASP.NET 2.0中提供的新特性。URL對映技術幫助我們將一個特定URL對映為另一個URL。為了幫助理解,我們假設你在站點有一個叫Homepage.aspx的頁面來訪問主頁,所有的使用者也都用這個頁面來訪問你的主頁。但由於某些原因,你要將主頁改為Origin

11.2.5、搭建RESTful API 之 實現WSGI服務的URL對映

問題引出:對於一個稍具規模的網站來說,實現的功能不可能通過一條URL來完成。如何定義多條URL,也是RESTful API考慮的問題。 需求: 本小節將考慮這樣一個虛擬機器管理的WSGI服務。使用者可以通過傳送HTTP請求,來實現對虛擬機器的管理(包括建立、查詢、更新以及刪

微信公眾號:伺服器如何配置(已啟用)?php實現介面配置伺服器資源資訊,填寫URL後正確響應微信傳送的Token驗證

最終配置效果如下所示:首先註冊微信公眾號,申請測試賬號什麼的我就不細說了。一、關於微信公眾號接入網址 這是從開發者文件上面弄下來的,下圖就是接入的地方,在開發者中心-伺服器的配置,看一下微信開發者文件是怎麼說的URL:就是你的伺服器的URL(要能響應TOKEN驗證,還要能在外

冒泡排序-Python與PHP實現

code 引用傳遞 true div bubble logs imp random and Python實現 import random a=[random.randint(1,999) for x in range(0,33)] # 冒泡排序,python中數組是按

選擇排序-Python與PHP實現

blog 性能 null pytho int color += log 時間 選擇排序Python實現 import random # 生成待排序數組 a=[random.randint(1,999) for x in range(0,36)] # 選擇排序 def

php實現中文反轉字符串的方法

str1 單個 head 共和國 list har 字符串 string text 1 <?php 2 3 header("content-type:text/html;charset=utf-8"); 4 /** 5 此函數的作用是反轉中文字符串

AJAX+PHP實現三級聯動

lec hang implode clas success cti 部分 點擊事件 ces 利用ajax實現頁面地區選擇三級聯動 效果圖如下 當選擇相應省份時,對應顯示出所有相關城市和地區的下拉選擇 來看下如何實現的 html頁面部分 <!DOCTYPE htm

使用PHP實現水仙花數及各種特殊有趣數的輸出

php 水仙花數 特殊數據 有趣 算法尊敬的讀者,見文好。本文包含以下內容:1,為什麽要寫這篇文章!2,具體的方案及代碼實現!3,你可能遇到的問題!4,文末本文測試用源碼網盤地址!特殊說明:本文使用的語言是PHP;本文運行的環境是:Apache2.4, PHP5.6 。第一部分:為什麽要寫這篇文章!因為經常會

PHP 實現簡單的樹形列表。

開發 記錄 動態 數據庫設計 在線 最近在為公司開發一個在線瀏覽PDF文檔的小web系統。在構建動態列表的時候犯了愁,很久沒寫代碼了,手有些生了,搞了半天才搞出來,寫篇博文記錄一下。首先是數據庫設計我設計的一個列數為三列的表Treenodes,這三列分別用來存儲當前節點的id、節點名稱、父

PHP 實現簡單的樹形列表 之二

服務器 數據庫 字符串 小項目 function 2017.5.22 北京 大雨來到公司之後, 準備把代碼移植到公司的小項目裏,移植的過程中發現了一處設計有問題的地方,調整一下。第一處錯誤是:構建葉子節點的時候,只保存了節點的名稱,沒有存ID, 如果頁面跟後臺交互的時候,當存在節點名稱一樣

PHP實現簡單的評論與回復功能還有刪除信息

技術分享 mit [0 ech ges get values width 錯誤 我們首先先看一下功能 上面黑色的是評論的下面紅色的字體是回復的 再來看看怎麽實現的 1.發布評論 <form action="pinglunchili.php" method="po

使用jquery+ajax+php實現搜索框的功能

test .ajax 關鍵字 焦點 pwd show span 知識庫 document 搜索框的原理: 客戶端:輸入要搜索的關鍵字於文本框,然後文本框將關鍵字獲取,使用ajax發送請求到服務端,然後根據服務端返回來的信息顯示到一個div中 服務端:接收傳過來的數據,然後在

PHP實現Collection數據集類及其原理

phpPHP 語言最重要的特性之一便是數組了(特別是關聯數組)。PHP 為此也提供不少的函數和類接口方便於數組操作,但沒有一個集大成的類專門用來操作數組。如果數組操作不多的話,個別函數用起來會比較靈活,開銷也小。但是,如果經常操作數組,尤其是對數組進行各種操作如排序、入棧、出隊列、翻轉、叠代等,系統函數用起來

javascript+php實現根據用戶時區顯示當地時間的方法

rip 判斷 方法 exp margin 一段 neo string == 本文實例講述了javascript+php實現根據用戶時區顯示當地時間的方法。分享給大家供大家參考。具體如下: 在跨時區應用中會用到下面代碼,這是以前寫的一段代碼。 服務器保存相關時間配置,保存

「七天自制PHP框架」第三天:PHP實現的設計模式

爭論 框架 啟動 興趣 註意 end php imp close 往期回顧:「七天自制PHP框架」第二天:模型與數據庫,點擊此處 原文地址:http://www.cnblogs.com/sweng/p/6624845.html,歡迎關註:編程老頭 為什麽要使用設計模式?