站长网_站长创业_站长主页_站长之家_易采站长站

会员投稿 投稿指南 站长资讯通告: phpwind7.5运营工具:站点运营必须工具集合
搜索:
您的位置: 主页 > 教程 > CMS > phpwind > » 正文

phpwind的rewrite重写原理

来源: 易采站长站

就是一般我们用echo print 输出字符到页面上的时候,意味着只要执行到了echo,php就会立即输出到客户端,但php有几个和缓冲相关的函数,他可以控制你输出的行为,就是不立马输出,而是等你调用了ob_flush/flush函数,才输出。而pw就是利用了这个原理,等页面所有的内容都生成完毕了,最后调footer()时,ob_get_contents(),获取缓冲的内容,通过正则批量替换url,构造rewrite的url格式。

关于ob,其实有两种主要的使用场景,一个是实现页面压缩输出 - ob_gzhandler;再一个是在ajax/自定义api返回数据时,程序执行过程中,你不知道前面的程序是否有些意外的输出字符如空格、空行等,他们在数据返回时会造成很多意外情况,所以可以在你输出数据前,清除前面的缓冲内容,重新开始输出。

官方默认的重写规则(注:重写是web服务器 - 如apache、nginx或应用容器tomcat的功能,不是程序语言自己的功能),如pw的一条重写规则 - apache:


RewriteRule ^(.*)-htm-(.*)$ $1.php?$2

首先,我们分析他的构成。当我们打开 global.php 文件,找到 :



<?php
$db_obstart == 1 ? ob_start('ob_gzhandler') : ob_start();
?>

我们会发现,这个全局文件打开了一个ob_start,并且进行一些判断。这个是pw系统进行rewrite的一个关键。

然后我们再找到footer()函数:



<?php
function footer(){
global $db,$db_obstart,$db_footertime,$db_htmifopen,$P_S_T,$mtablewidth,$db_ceoconnect,$wind_version,$imgpath,$stylepath,$footer_ad,$db_union,$dbinfo,$timestamp;
Update_ol();
if($db){
$qn=$db->query_num;
}
$ft_gzip=($db_obstart==1 ? "Gzip enabled" : "Gzip disabled").$db_union[3];
if ($db_footertime == 1){
$t_array = explode(' ',microtime());
$totaltime = number_format(($t_array[0]+$t_array[1]-$P_S_T),6);
$wind_spend = "Total $totaltime(s) query $qn,";
}
$ft_time=get_date($timestamp,'m-d H:i');
include PrintEot('footer');
$output = str_replace(array('<!--<!---->','<!---->'),array('',''),ob_get_contents());
if($db_htmifopen){
$output = preg_replace(
"/<a(s*[^>]+s*)href=(["|']?)([^"'>s]+.php?[^"'>s]+)(["|']?)/ies",
"Htm_cv('3','<a1href="')",
$output
);
}
ob_end_clean();
$db_obstart == 1 ? ob_start('ob_gzhandler') : ob_start();
echo $output;
flush;
exit;
}
?>

common.php中:



function parseHtmlUrlRewrite($html, $flag) {
return $flag ? preg_replace("/\<a(\s*[^\>]+\s*)href\=([\"|\']?)((index|cate|thread|read|faq|rss)\.php\?[^\"\'>\s]+\s?)[\"|\']?/ies", "Htm_cv('\\3','<a\\1href=\"')", $html) : $html;
}</p> <p>/**
* url处理
*
* @param string $url
* @param string $tag
* @return string
*/
function Htm_cv($url, $tag) {
return stripslashes($tag) . urlRewrite($url) . '"';
}</p> <p>function urlRewrite($url) {
global $db_htmifopen, $db_dir, $db_ext;
if (!$db_htmifopen) return $url;
$tmppos = strpos($url, '#');
$add = $tmppos !== false ? substr($url, $tmppos) : '';
$turl = str_replace(array('.php?', '=', '&amp;', '&', $add), array($db_dir, '-', '-', '-', ''), $url);//pw的重写规则在这里进行字符的替换
$turl != $url && $turl .= $db_ext;
return $turl . $add;
}
Tags:
最新图文资讯
1 2 3 4 5 6
相关文章列表:
曾刚:消费金融未来监管或出现这几大方向 曾刚:消费金融未来监管或出现这几大
放眼国际,全球金融科技创新正如火如荼,新技术重塑着金融产业全流程。以人工智能、区块链、云计算、大数据为代表的核
2017⇆2019三年寒冬 第三方支付行业之变 2017⇆2019三年寒冬 第三方支付行业之变
中国的钱包制造商,太难了。 有着中国缝制设备制造之都美誉的浙江台州,如今已经找不到专门生产钱包的企业了。 要知道
行业诞生以来最大“地震”!大数据倒在2019 行业诞生以来最大“地震”!大数据倒
一场大数据行业诞生以来最大规模的地震正在发生。 2019年9月6日,第三方数据风控公司魔蝎数据和新颜科技的相关负责人在
“蹊跷”的银行财报:资本充足率飙升至15357% “蹊跷”的银行财报:资本充足率飙升
日前,中国债券信息网披露了黄石农村商业银行股份有限公司(下称黄石农商行)2019年三季度信息报告(下称三季报)。 三
被诈骗+背债!凭什么不让我们起诉支付宝? 被诈骗+背债!凭什么不让我们起诉支付
本文呦呦鹿鸣一位读者的遭遇,这件事从未披露过,他写了下来,供诸君参考。我很欣赏年轻的朋友们这样认真对待自己权利
建行贵州分行被罚50万:“e信通”信贷资金被挪用 建行贵州分行被罚50万:“e信通”信贷资
12月3日,贵州银保监局公布行政处罚信息公开表(银保监银罚决字〔2019〕17号),中国建设银行股份有限公司(以下称建设银
水滴筹创始人:再管不好 愿把公司交给公益组织 水滴筹创始人:再管不好 愿把公司交给
12月5日晚,水滴筹创始人兼CEO沈鹏在微博上发布公开信《水滴筹欢迎大众的监督,希望重新赢得信任》,并表示再管不好,我
山东证监局原局长徐铁被开除党籍:曾与姚刚共事6年 山东证监局原局长徐铁被开除党籍:曾
12月6日,据中央纪委国家监委网站消息,日前,中央纪委国家监委驻中国证监会纪检监察组、山东省监委对中国证券监督管理
助贷业务的运作模式、潜在风险及监管建议 助贷业务的运作模式、潜在风险及监管
编者语: 助贷业务存在客户支持、资金支持和风控支持三种基本模式,其发展建立在比较优势理论和金融功能理论的基础上
太悲情!内幕交易亏损超百万 还被罚60万! 太悲情!内幕交易亏损超百万 还被罚
证监会日前通报了一桩利用内幕交易炒股的案件。在ST天业历时一年多,耗资18亿元的跨国并购案的背后,违法当事人斥资千
最新文章
易采站长站 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助 -