小清新,就是说的SegmentFault blog啊 首先感谢社区通过我的审核,给我一个平台。 风格很好,左右分工很好。 以后将会在这里开博客了。
最近接手一个项目里面也有伪静态来工作
分析其原理让我有点脑大,尤其是一开始上手的时候没有手册,没有
*关于wordpress大家都知道他的那个伪静态,这个程序的伪静态是用rewrite.php来中转的,但更明确的是,他把一个比较简单的处理弄得很复杂,而且犹豫这家伙并不擅长类处理方式,于是我在处理这个rewrite的时候很不方便,花了一天时间才将Apache php5.2.17下的路径重写搞定,中间还有很多路径规则,Apache不解析让我找不着北,但最终调好了。
他的可取之处有两点一个是使用了__rewrite方法对数据库中的路径规则进行解析,当然她在数据库中写的那个东西就不咋地了 本想截图,只能等会了,手机上不了那个网站 等有机会了吧这个截图在放上来吧 代码如下,核心就是在$_SEVER[' REQUEST_URI']上,匹配到后就用这个赋值让浏览器识别网址为伪静态 另一个他用的经典部分就是判断好了之后就用include方法把根目录下的index.php引用进来,然后在根目录下的index.php中将class下的index.php包含进来, 在class中的index.php中通过autoload loadlib 等方法加载相关类 可以说程序逻辑没有问题,但却很明显的不系统,不条理,读懂这个程序很难 相比ThinkPHP,这套程序真是不咋地*
//include(dirname(__FILE__))
function __download($file){
set_time_limit(0);
if(file_exists($file)){
$info = pathinfo($file);
$fsize = filesize($file);
if (isset($_SERVER['HTTP_RANGE']) && ($_SERVER['HTTP_RANGE'] != "") && preg_match("/^bytes=([0-9]+)-$/i", $_SERVER['HTTP_RANGE'], $match) && ($match[1] 0) {
header("HTTP/1.1 206 Partial Content");
header("Accept-Ranges: bytes");
header("Content-Ranges: bytes ".$start."-".($fsize - 1) . "/" . $fsize);
header("Content-Length: ".($fsize - $start));
} else {
header("Accept-Ranges: bytes");
header("Accept-Length: $fsize");
header("Content-Length: $fsize");
}
header("Content-Type: application/octet-stream");
header("Content-Disposition:attachment;filename=".$info['basename']);
if($f=fopen($file,'rb')){fseek($f, $start);
while($r = fread($f, 1024)){
echo $r;
}
fclose($f);
} else echo 'error';
return true;
} else return false;
}
function __outFile($file, $contentType){
if ($contentType == 'application/octet-stream') {
__download($file);
} else {
$gmt_mtime = gmdate('D, d M Y H:i:s', filemtime($file)).' GMT';
if((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime)){
header("HTTP/1.1 304 Not Modified");
header("Expires: ");
header("Cache-Control: ");
header("Pragma: ");
header('Content-Type: '.$contentType);
header("Tips: Cache Not Modified");
header('Content-Length: 0');
return true;
}
header("Last-Modified:" . $gmt_mtime);
header("Expires: ");
header("Cache-Control: ");
header("Pragma: ");
header('Content-Type: '.$contentType);
header("Tips: Normal Respond");
//header('Content-Type: '.$imgInfo['mime']);
if ($f = fopen($file, 'rb')) {
while ($r = fread($f, 1024)) {
echo $r;
}
fclose($f);
}
}
return true;
}
function __rewrite(){
global $r_rewrite,$r_uri,$r_d,$r_dir,$r_content_type_list;
$matching=false;
foreach($r_rewrite as $v){
if(preg_match($v[0],$r_uri,$matches)){
$r_uri=$v[1];
$r_uri=preg_replace('/\$(\d+)/e','$matches[$1]',$r_uri);
$matching=true;
break;
}
}
if($matching){
$url_info=parse_url($r_uri);
$r_include=str_replace('/',$r_d,$r_dir.$url_info['path']);
if(file_exists($r_include) && filetype($r_include)=='file'){
if($query=$url_info['query']){
$sp=explode('&',$query);
foreach($sp as $v){
$sp2=explode('=',$v);
$_GET[$sp2[0]]=addslashes(urldecode($sp2[1]));//重要
}
$_SERVER['QUERY_STRING']=$query;
}
//if($url_info[''])
return $r_include;
} else return __rewrite();
} else return false;
}
$r_marker='rewrite';
$r_marker_len=strlen($r_marker);
if($r_q=$_SERVER['QUERY_STRING']){
if(substr($r_q,0,$r_marker_len)===$r_marker){
if(($r_f1=strpos($r_q,'&'))!==false){
$r_=substr($r_q,0,$r_f1);
if(($r_f2=strpos($r_,'='))!==false){
$r_=substr($r_,$r_f2+1);
$_SERVER['QUERY_STRING']=substr($r_q,$r_f1+1);
if(strpos($_SERVER['QUERY_STRING'],$r_marker.'=')===false)
unset($_GET[$r_marker]);
} else header("HTTP/1.1 404 Not Found");
} else {
$r_=$_GET[$r_marker];
$_SERVER['QUERY_STRING']='';
$_GET=array();
}
/*rewrite start*/
unset($r_marker,$r_marker_len,$r_f1,$r_f2,$r_q);//unset var
$r_!='' && substr($r_,0,1)=='/' && $r_=substr($r_,1);
if($r_){
//if not null
$r_='/'.$r_;
$r_dir=dirname(__FILE__);
$r_d=DIRECTORY_SEPARATOR;
//if exists out
$r_include=str_replace('/',$r_d,$r_dir.$r_);
$r_content_type_list=array(
'001'=>'application/x-001',
'301'=>'application/x-301',
'323'=>'text/h323',
'906'=>'application/x-906',
'907'=>'drawing/907',
'a11'=>'application/x-a11',
'acp'=>'audio/x-mei-aac',
'ai'=>'application/postscript',
'aif'=>'audio/aiff',
'aifc'=>'audio/aiff',
'aiff'=>'audio/aiff',
'anv'=>'application/x-anv',
'asa'=>'text/asa',
'asf'=>'video/x-ms-asf',
'asp'=>'text/asp',
'asx'=>'video/x-ms-asf',
'au'=>'audio/basic',
'avi'=>'video/avi',
'awf'=>'application/vnd.adobe.workflow',
'biz'=>'text/xml',
'bmp'=>'application/x-bmp',
'bot'=>'application/x-bot',
'c4t'=>'application/x-c4t',
'c90'=>'application/x-c90',
'cal'=>'application/x-cals',
'cat'=>'application/vnd.ms-pki.seccat',
'cdf'=>'application/x-netcdf',
'cdr'=>'application/x-cdr',
'cel'=>'application/x-cel',
'cer'=>'application/x-x509-ca-cert',
'cg4'=>'application/x-g4',
'cgm'=>'application/x-cgm',
'cit'=>'application/x-cit',
'class'=>'java/*',
'cml'=>'text/xml',
'cmp'=>'application/x-cmp',
'cmx'=>'application/x-cmx',
'cot'=>'application/x-cot',
'crl'=>'application/pkix-crl',
'crt'=>'application/x-x509-ca-cert',
'csi'=>'application/x-csi',
'css'=>'text/css',
'cut'=>'application/x-cut',
'dbf'=>'application/x-dbf',
'dbm'=>'application/x-dbm',
'dbx'=>'application/x-dbx',
'dcd'=>'text/xml',
'dcx'=>'application/x-dcx',
'der'=>'application/x-x509-ca-cert',
'dgn'=>'application/x-dgn',
'dib'=>'application/x-dib',
'dll'=>'application/x-msdownload',
'doc'=>'application/msword',
'dot'=>'application/msword',
'drw'=>'application/x-drw',
'dtd'=>'text/xml',
'dwf'=>'Model/vnd.dwf',
'dwf'=>'application/x-dwf',
'dwg'=>'application/x-dwg',
'dxb'=>'application/x-dxb',
'dxf'=>'application/x-dxf',
'edn'=>'application/vnd.adobe.edn',
'emf'=>'application/x-emf',
'eml'=>'message/rfc822',
'ent'=>'text/xml',
'epi'=>'application/x-epi',
'eps'=>'application/x-ps',
'eps'=>'application/postscript',
'etd'=>'application/x-ebx',
'exe'=>'application/x-msdownload',
'fax'=>'image/fax',
'fdf'=>'application/vnd.fdf',
'fif'=>'application/fractals',
'fo'=>'text/xml',
'frm'=>'application/x-frm',
'g4'=>'application/x-g4',
'gbr'=>'application/x-gbr',
'gif'=>'image/gif',
'gl2'=>'application/x-gl2',
'gp4'=>'application/x-gp4',
'hgl'=>'application/x-hgl',
'hmr'=>'application/x-hmr',
'hpg'=>'application/x-hpgl',
'hpl'=>'application/x-hpl',
'hqx'=>'application/mac-binhex40',
'hrf'=>'application/x-hrf',
'hta'=>'application/hta',
'htc'=>'text/x-component',
'htm'=>'text/html',
'html'=>'text/html',
'htt'=>'text/webviewhtml',
'htx'=>'text/html',
'icb'=>'application/x-icb',
'ico'=>'image/x-icon',
'ico'=>'application/x-ico',
'iff'=>'application/x-iff',
'ig4'=>'application/x-g4',
'igs'=>'application/x-igs',
'iii'=>'application/x-iphone',
'img'=>'application/x-img',
'ins'=>'application/x-internet-signup',
'isp'=>'application/x-internet-signup',
'IVF'=>'video/x-ivf',
'java'=>'java/*',
'jfif'=>'image/jpeg',
'jpe'=>'image/jpeg',
'jpe'=>'application/x-jpe',
'jpeg'=>'image/jpeg',
'jpg'=>'image/jpeg',
'jpg'=>'application/x-jpg',
'js'=>'application/x-javascript',
'jsp'=>'text/html',
'la1'=>'audio/x-liquid-file',
'lar'=>'application/x-laplayer-reg',
'latex'=>'application/x-latex',
'lavs'=>'audio/x-liquid-secure',
'lbm'=>'application/x-lbm',
'lmsff'=>'audio/x-la-lms',
'ls'=>'application/x-javascript',
'ltr'=>'application/x-ltr',
'm1v'=>'video/x-mpeg',
'm2v'=>'video/x-mpeg',
'm3u'=>'audio/mpegurl',
'm4e'=>'video/mpeg4',
'mac'=>'application/x-mac',
'man'=>'application/x-troff-man',
'math'=>'text/xml',
'mdb'=>'application/msaccess',
'mdb'=>'application/x-mdb',
'mfp'=>'application/x-shockwave-flash',
'mht'=>'message/rfc822',
'mhtml'=>'message/rfc822',
'mi'=>'application/x-mi',
'mid'=>'audio/mid',
'midi'=>'audio/mid',
'mil'=>'application/x-mil',
'mml'=>'text/xml',
'mnd'=>'audio/x-musicnet-download',
'mns'=>'audio/x-musicnet-stream',
'mocha'=>'application/x-javascript',
'movie'=>'video/x-sgi-movie',
'mp1'=>'audio/mp1',
'mp2'=>'audio/mp2',
'mp2v'=>'video/mpeg',
'mp3'=>'audio/mp3',
'mp4'=>'video/mpeg4',
'mpa'=>'video/x-mpg',
'mpd'=>'application/vnd.ms-project',
'mpe'=>'video/x-mpeg',
'mpeg'=>'video/mpg',
'mpg'=>'video/mpg',
'mpga'=>'audio/rn-mpeg',
'mpp'=>'application/vnd.ms-project',
'mps'=>'video/x-mpeg',
'mpt'=>'application/vnd.ms-project',
'mpv'=>'video/mpg',
'mpv2'=>'video/mpeg',
'mpw'=>'application/vnd.ms-project',
'mpx'=>'application/vnd.ms-project',
'mtx'=>'text/xml',
'mxp'=>'application/x-mmxp',
'net'=>'image/pnetvue',
'nrf'=>'application/x-nrf',
'nws'=>'message/rfc822',
'odc'=>'text/x-ms-odc',
'out'=>'application/x-out',
'p10'=>'application/pkcs10',
'p12'=>'application/x-pkcs12',
'p7b'=>'application/x-pkcs7-certificates',
'p7c'=>'application/pkcs7-mime',
'p7m'=>'application/pkcs7-mime',
'p7r'=>'application/x-pkcs7-certreqresp',
'p7s'=>'application/pkcs7-signature',
'pc5'=>'application/x-pc5',
'pci'=>'application/x-pci',
'pcl'=>'application/x-pcl',
'pcx'=>'application/x-pcx',
'pdf'=>'application/pdf',
'pdf'=>'application/pdf',
'pdx'=>'application/vnd.adobe.pdx',
'pfx'=>'application/x-pkcs12',
'pgl'=>'application/x-pgl',
'pic'=>'application/x-pic',
'pko'=>'application/vnd.ms-pki.pko',
'pl'=>'application/x-perl',
'plg'=>'text/html',
'pls'=>'audio/scpls',
'plt'=>'application/x-plt',
'png'=>'image/png',
'pot'=>'application/vnd.ms-powerpoint',
'ppa'=>'application/vnd.ms-powerpoint',
'ppm'=>'application/x-ppm',
'pps'=>'application/vnd.ms-powerpoint',
'ppt'=>'application/vnd.ms-powerpoint',
'ppt'=>'application/x-ppt',
'pr'=>'application/x-pr',
'prf'=>'application/pics-rules',
'prn'=>'application/x-prn',
'prt'=>'application/x-prt',
'ps'=>'application/x-ps',
'ps'=>'application/postscript',
'ptn'=>'application/x-ptn',
'pwz'=>'application/vnd.ms-powerpoint',
'r3t'=>'text/vnd.rn-realtext3d',
'ra'=>'audio/vnd.rn-realaudio',
'ram'=>'audio/x-pn-realaudio',
'ras'=>'application/x-ras',
'rat'=>'application/rat-file',
'rdf'=>'text/xml',
'rec'=>'application/vnd.rn-recording',
'red'=>'application/x-red',
'rgb'=>'application/x-rgb',
'rjs'=>'application/vnd.rn-realsystem-rjs',
'rjt'=>'application/vnd.rn-realsystem-rjt',
'rlc'=>'application/x-rlc',
'rle'=>'application/x-rle',
'rm'=>'application/vnd.rn-realmedia',
'rmf'=>'application/vnd.adobe.rmf',
'rmi'=>'audio/mid',
'rmj'=>'application/vnd.rn-realsystem-rmj',
'rmm'=>'audio/x-pn-realaudio',
'rmp'=>'application/vnd.rn-rn_music_package',
'rms'=>'application/vnd.rn-realmedia-secure',
'rmvb'=>'application/vnd.rn-realmedia-vbr',
'rmx'=>'application/vnd.rn-realsystem-rmx',
'rnx'=>'application/vnd.rn-realplayer',
'rp'=>'image/vnd.rn-realpix',
'rpm'=>'audio/x-pn-realaudio-plugin',
'rsml'=>'application/vnd.rn-rsml',
'rt'=>'text/vnd.rn-realtext',
'rtf'=>'application/msword',
'rtf'=>'application/x-rtf',
'rv'=>'video/vnd.rn-realvideo',
'sam'=>'application/x-sam',
'sat'=>'application/x-sat',
'sdp'=>'application/sdp',
'sdw'=>'application/x-sdw',
'sit'=>'application/x-stuffit',
'slb'=>'application/x-slb',
'sld'=>'application/x-sld',
'slk'=>'drawing/x-slk',
'smi'=>'application/smil',
'smil'=>'application/smil',
'smk'=>'application/x-smk',
'snd'=>'audio/basic',
'sol'=>'text/plain',
'sor'=>'text/plain',
'spc'=>'application/x-pkcs7-certificates',
'spl'=>'application/futuresplash',
'spp'=>'text/xml',
'ssm'=>'application/streamingmedia',
'sst'=>'application/vnd.ms-pki.certstore',
'stl'=>'application/vnd.ms-pki.stl',
'stm'=>'text/html',
'sty'=>'application/x-sty',
'svg'=>'text/xml',
'swf'=>'application/x-shockwave-flash',
'tdf'=>'application/x-tdf',
'tg4'=>'application/x-tg4',
'tga'=>'application/x-tga',
'tif'=>'image/tiff',
'tif'=>'application/x-tif',
'tiff'=>'image/tiff',
'tld'=>'text/xml',
'top'=>'drawing/x-top',
'torrent'=>'application/x-bittorrent',
'tsd'=>'text/xml',
'txt'=>'text/plain',
'uin'=>'application/x-icq',
'uls'=>'text/iuls',
'vcf'=>'text/x-vcard',
'vda'=>'application/x-vda',
'vdx'=>'application/vnd.visio',
'vml'=>'text/xml',
'vpg'=>'application/x-vpeg005',
'vsd'=>'application/vnd.visio',
'vsd'=>'application/x-vsd',
'vss'=>'application/vnd.visio',
'vst'=>'application/vnd.visio',
'vst'=>'application/x-vst',
'vsw'=>'application/vnd.visio',
'vsx'=>'application/vnd.visio',
'vtx'=>'application/vnd.visio',
'vxml'=>'text/xml',
'wav'=>'audio/wav',
'wax'=>'audio/x-ms-wax',
'wb1'=>'application/x-wb1',
'wb2'=>'application/x-wb2',
'wb3'=>'application/x-wb3',
'wbmp'=>'image/vnd.wap.wbmp',
'wiz'=>'application/msword',
'wk3'=>'application/x-wk3',
'wk4'=>'application/x-wk4',
'wkq'=>'application/x-wkq',
'wks'=>'application/x-wks',
'wm'=>'video/x-ms-wm',
'wma'=>'audio/x-ms-wma',
'wmd'=>'application/x-ms-wmd',
'wmf'=>'application/x-wmf',
'wml'=>'text/vnd.wap.wml',
'wmv'=>'video/x-ms-wmv',
'wmx'=>'video/x-ms-wmx',
'wmz'=>'application/x-ms-wmz',
'wp6'=>'application/x-wp6',
'wpd'=>'application/x-wpd',
'wpg'=>'application/x-wpg',
'wpl'=>'application/vnd.ms-wpl',
'wq1'=>'application/x-wq1',
'wr1'=>'application/x-wr1',
'wri'=>'application/x-wri',
'wrk'=>'application/x-wrk',
'ws'=>'application/x-ws',
'ws2'=>'application/x-ws',
'wsc'=>'text/scriptlet',
'wsdl'=>'text/xml',
'wvx'=>'video/x-ms-wvx',
'xdp'=>'application/vnd.adobe.xdp',
'xdr'=>'text/xml',
'xfd'=>'application/vnd.adobe.xfd',
'xfdf'=>'application/vnd.adobe.xfdf',
'xhtml'=>'text/html',
'xls'=>'application/vnd.ms-excel',
'xls'=>'application/x-xls',
'xlw'=>'application/x-xlw',
'xml'=>'text/xml',
'xpl'=>'audio/scpls',
'xq'=>'text/xml',
'xql'=>'text/xml',
'xquery'=>'text/xml',
'xsd'=>'text/xml',
'xsl'=>'text/xml',
'xslt'=>'text/xml',
'xwd'=>'application/x-xwd',
'x_b'=>'application/x-x_b',
'x_t'=>'application/x-x_t',
'*'=>'application/octet-stream'
);
if(file_exists($r_include)){
if(filetype($r_include)=='file'){
$r_pathinfo=pathinfo($r_include);
$r_extension=$r_pathinfo['extension'];
$r_content_type='';
if($r_extension){
$r_extension=strtolower($r_extension);
if($r_extension=='php'){
$_SERVER['SCRIPT_FILENAME']=$r_include;
$_SERVER['PHP_SELF']=$r_;
chdir($r_pathinfo['dirname']);
unset($r_,$r_dir,$r_d,$r_extension,$r_pathinfo,$r_content_type_list);
include($r_include);
exit;
}
if(!($r_content_type=$r_content_type_list[$r_extension]))$r_content_type=$r_content_type_list['*'];
} else $r_content_type=$r_content_type_list['*'];
__outFile($r_include, $r_content_type);
unset($r_,$r_dir,$r_d,$r_extension,$r_pathinfo,$r_content_type_list,$r_content_type,$r_include,$f,$r);
} else {
//folder
substr($r_include,-1) != DIRECTORY_SEPARATOR && $r_include.= DIRECTORY_SEPARATOR;
$r_include.='index.php';
if(file_exists($r_include)){
$_SERVER['SCRIPT_FILENAME'] = $r_include;
unset($r_,$r_dir,$r_d,$r_content_type_list);
include($r_include);
} else header("HTTP/1.1 404 Not Found");
}
} else {
//exe rewrite
$r_rewrite_file='./cache/array/rewrite.php';
if(file_exists($r_rewrite_file)){
$fp = fopen($r_rewrite_file,"rb");
flock($fp, LOCK_SH) ;
$r_rewrite=@fread($fp,filesize($r_rewrite_file));
flock($fp, LOCK_UN);
fclose($fp);
unset($fp);
$r_rewrite=unserialize(substr($r_rewrite,13));//rewrite_rule
//if($_SERVER['HTTP_X_REWRITE_URL'])$r_uri=$_SERVER['HTTP_X_REWRITE_URL'];
//else $r_uri=$r_uri.$_SERVER['REQUEST_URI'];
$_GET=array();
$r_uri=$r_.($_SERVER['QUERY_STRING']?'?'.$_SERVER['QUERY_STRING']:'');
if(($r_include=__rewrite())!==false){
$r_pathinfo=pathinfo($r_include);
$r_extension=$r_pathinfo['extension'];
$r_content_type='';
if($r_extension){
$r_extension=strtolower($r_extension);
if($r_extension=='php'){
$_SERVER['PHP_SELF']=$r_;
$_SERVER['SCRIPT_FILENAME']=$r_include;
chdir($r_pathinfo['dirname']);
unset($r_,$r_dir,$r_d,$r_extension,$r_pathinfo,$r_content_type_list);
include($r_include);
exit;
}
if(!($r_content_type=$r_content_type_list[$r_extension]))$r_content_type=$r_content_type_list['*'];
} else $r_content_type=$r_content_type_list['*'];
/*header('Content-Type:'.$r_content_type);
if($f=fopen($r_include,'rb')){
while($r=fread($f,1024))echo $r;
fclose($f);
}*/
__outFile($r_include, $r_content_type);
} else header("HTTP/1.1 404 Not Found");
unset($r_,$r_dir,$r_d,$r_content_type_list,$r_rewrite_file);
} else header("HTTP/1.1 404 Not Found");
//
}
} else {
unset($r_);
include('./index.php');//index
}
/*rewrite end*/
} else header("HTTP/1.1 404 Not Found");
}
else
include('./index.php');