方法重写的意义有哪些

方法重写的意义有哪些,第1张

phpwind的rewrite重写原理

关于pw重写,phpwind采用了一个一般人不容易太在意的技术点,即输出缓冲区——ob_。我们来分析一下phpwind的重写原理。

一般当你使用echoprint将标识符输出到页面时,意味着如果你实现了echo,php会立即输出到手机客户端。但是php有几个和缓冲相关的函数,他可以 *** 纵你的个人行为,但是他不会马上输出,只是等你启用ob_flush/flush函数后再输出。Pw就是用的这个原理。当页面的所有内容形成后,footer()最终调整时,使用ob_get_contents()获取缓冲的内容,重写的url文件格式是按照正则表达式批量改变URL来构造的。

其实关于ob有两个关键的应用场景,一个是完成页面缩减输出——ob_gzhandler;;再一个就是ajax/customapi返回数据信息时,在程序运行的整个过程中,你永远不知道前面的程序流是不是一些意外的输出标识符比如空case,空白线等。它们会导致数据信息返回时出现很多意想不到的情况,所以你可以在输出数据信息之前,把前面的缓冲区内容去掉,从头开始输出。

官方默认设置的重写标准(注意:重写是web服务器的功能,比如apache、nginx或者tomcat,而不是编程语言本身的功能),比如pw-Apache的一个重写标准:

复制下面的代码:
重写规则(。*)-htm-(

首先大家分析一下他的作文。当我们打开global.php文档时,请查找:


复制代码如下:
<?php
$db_obstart==1?ob_start('ob_gzhandler'):ob_start();
?>

你会发现这个全局文件开了一个ob_start,做了一些决议。开发重写是pw系统软件的重要组成部分。

然后我们将寻找footer()函数:


复制代码编码以下:
<?php
functionfooter(){
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?"Gzipenabled":"Gzipdisabled").$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-dH:i');
includePrintEot('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;
}
?>

复制代码如下:
<?PHP
functionfooter(){
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->;查询数量;
}
$ft_gzip=($db_obstart==1?“Gzip启用”:“Gzip禁用”)。$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-dH:I');
includeprinteot('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;
同花顺;
退出;
}
?>

通用.php:


复制代码编码如下:
函数parsehtmlurlreweb($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解析
*
*@paramstring$URL
*@paramstring$tag
*@returnstring
*/
functionhtm_cv($$tag){
returnstrips斜杠($tag)。'urlRewrite($url)。'"';
}<;/p>; <;p>函数URLrewrite($URL){
global$db_htmifopen,$db_dir,$db_ext
如果(!$db_htmifopen)返回$url
$tmppos=strpos($url,'#');
$add=$tmppos!==假的?substr($url,$tmppos):“”;
$turl=str_replace(array('。php?,'=','&amp,'&,$add),数组($db_dir,'-','-','-',''),$URL);//pw的重写标准在这里进行标识符替换
$turl!=$url&&$turl。=$db_ext
return$turl。$add
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/772150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存