熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

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

2013-11-15 12:29:43  來源: PHP編程 
偽靜態技術比較好突破需要自己構造中轉注入頁面偽靜態技術原理都很簡單就是把原來的 indexphp?id= 這種形式的URL給替換成其它形式  

  先說實現方法
injphp:

復制代碼 代碼如下:
<?php
set_time_limit();
$id=$_GET["id"];
$id=str_replace(" ""%"$id);
$id=str_replace("=""%D"$id);
$url="";
$ch=curl_init();
curl_setopt($chCURLOPT_URL"$url");
curl_setopt($chCURLOPT_RETURNTRANSFER);//啟用時將curl_init()獲取的信息以文件流的形式返回而不是直接輸出
curl_setopt($chCURLOPT_HEADER);//啟用時會將頭文件的信息作為數據流輸出
$output=curl_exec($ch);
curl_close($ch);
print_r($output);
?>

  
用wamp搭建一個服務器把上面injphp放到wamp/www/中然後在Havij中跑
=============================
PHP偽靜態實現方法一(利用Apache 服務器的功能)
檢查Apache是否支持mod_rewrite
讓Apache 支持htaccess
建立htaccess文件
規則
RewriteEngine on
RewriteRule ([azAZ]{})([]{})html$indexphp?action=$&id=$
([azAZ]{})([]{}) 是 URL長啥樣
$ 是([azAZ]{}) 所匹配的
$ 是[]{} 所匹配的
比如說wwwxxcom/pagehtml
真實的URL如下
action = page
id =
============================
PHP偽靜態實現方法二(編碼實現)
$PhpHtml_FileUrl = $_SERVER["REQUEST_URI"]
echo $PhpHtml_FileUrl
例子// localhost/php/testphp?id|@action|

復制代碼 代碼如下:
$PhpHtml_UrlString = str_replace("?"""str_replace("/"""strrchr(strrchr($PhpHtml_FileUrl"/")"?")) ))
/*
內層的strrchr出來/testphp?id|@action|
外層的strrchr出來id|@action|
內層的str_replace出來把 / 號去掉本例子 沒有
外層的str_replace出來把 ?號去掉本例子 沒有
*/
$PhpHtml_UrlQueryStrList = explode("@"$PhpHtml_UrlString);
/*把str變成以@為界限劃分的數組id| 和 action|*/
foreach($PhpHtml_UrlQueryStrList as $PhpHtml_UrlQueryStr)
{
$PhpHtml_TmpArray = explode("|"$PhpHtml_UrlQueryStr);
/* id => 和 action => */
$_GET[$PhpHtml_TmpArray[]] = $PhpHtml_TmpArray[];
}

  
============================
PHP偽靜態實現方法三(編碼實現)
例子: localhost/php/testphp//

復制代碼 代碼如下:
$filename = basename($_SERVER["SCRIPT_NAME"]);
echo $_SERVER["SCRIPT_NAME"];
echo $filename;
if(strtolower($filename) == testphp){
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前面那段給搞掉剩下 "/"之類的
$nav=ereg_replace("$script"""urldecode($nav));
echo $nav;
$vars = explode("/"$nav);
print_r($vars);
$id=intval($vars[]);
$action=intval($vars[]);
}
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)));
$nav=preg_replace("/^ht(m){}(l){}$/"""$nav);//去掉尾部的htm或html
$vars=explode("/"$nav);
print_r($vars);
for($i=;$i<count($vars);$i+=)
{
$_GET[$vars[$i]] = $vars[$i+];
}
return $_GET;
}

  
============================
PHP偽靜態實現方法五(編碼實現)
例子/html

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

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


From:http://tw.wingwit.com/Article/program/PHP/201311/21059.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.