`
maosuhan
  • 浏览: 113067 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

对uchome2.0 的function_common.php的研究2

    博客分类:
  • php
阅读更多

 

在common.php里,有这么一段代码

//启用GIP
if ($_SC['gzipcompress'] && function_exists('ob_gzhandler')) {
	ob_start('ob_gzhandler');
} else {
	ob_start();
}

 如果服务器支持gzip的话,那么就调用

ob_start('ob_gzhandler');

ob_start的意思是开始数据缓冲,也就是服务器的echo的东西会放在缓冲区里不会直接发送给浏览器。ob_gzhandler是作为回调函数来调用的。关于此函数解释为

 

ob_gzhandler() is intended to be used as a callback function for ob_start() to help facilitate sending gz-encoded data to web browsers that support compressed web pages. Before ob_gzhandler() actually sends compressed data, it determines what type of content encoding the browser will accept ("gzip", "deflate" or none at all) and will return its output accordingly. All browsers are supported since it's up to the browser to send the correct header saying that it accepts compressed web pages. If a browser doesn't support compressed pages this function returns FALSE .

 

而ob_start的那个callback参数的解释如下

When output_callback is called, it will receive the contents of the output buffer as its parameter and is expected to return a new output buffer as a result, which will be sent to the browser.

 

也即使说支持gzip的服务器会在把数据传到浏览器之前先把数据传给那个回调函数产生新的输出。ob_gzhandler一定就是压缩数据的方法了。

 

在function_common里有这么一个函数

ob_out

//调整输出
function ob_out() {
	global $_SGLOBAL, $_SCONFIG, $_SC;

	$content = ob_get_contents();

	$preg_searchs = $preg_replaces = $str_searchs = $str_replaces = array();

	if($_SCONFIG['allowrewrite']) {
		$preg_searchs[] = "/\<a href\=\"space\.php\?(uid|do)+\=([a-z0-9\=\&]+?)\"/ie";
		$preg_searchs[] = "/\<a href\=\"space.php\"/i";
		$preg_searchs[] = "/\<a href\=\"network\.php\?ac\=([a-z0-9\=\&]+?)\"/ie";
		$preg_searchs[] = "/\<a href\=\"network.php\"/i";

		$preg_replaces[] = 'rewrite_url(\'space-\',\'\\2\')';
		$preg_replaces[] = '<a href="space.html"';
		$preg_replaces[] = 'rewrite_url(\'network-\',\'\\1\')';
		$preg_replaces[] = '<a href="network.html"';
	}
	if($_SCONFIG['linkguide']) {
		$preg_searchs[] = "/\<a href\=\"http\:\/\/(.+?)\"/ie";
		$preg_replaces[] = 'iframe_url(\'\\1\')';
	}

	if($_SGLOBAL['inajax']) {
		$preg_searchs[] = "/([\x01-\x09\x0b-\x0c\x0e-\x1f])+/";
		$preg_replaces[] = ' ';

		$str_searchs[] = ']]>';
		$str_replaces[] = ']]&gt;';
	}

	if($preg_searchs) {
		$content = preg_replace($preg_searchs, $preg_replaces, $content);
	}
	if($str_searchs) {
		$content = trim(str_replace($str_searchs, $str_replaces, $content));
	}

	obclean();
	if($_SGLOBAL['inajax']) {
		xml_out($content);
	} else{
		if($_SCONFIG['headercharset']) {
			@header('Content-Type: text/html; charset='.$_SC['charset']);
		}
		echo $content;
		if(D_BUG) {
			@include_once(S_ROOT.'./source/inc_debug.php');
		}
	}
}
 

$content = ob_get_contents()为取得缓冲区的内容,在obclean之前都是在做字符串的替换,具体的我也不清楚是怎么搞的。

调用ob_clean()把缓冲区里的数据清楚掉。

如果是ajax请求,那么就返回一个数据的xml形式。

其余情况则很正常地把结果echo出去。你会发现在每一个daat下的tpl缓存页面文件里都有一个ob_out()函数。

贴一下相关函数的代码

function obclean() {
	global $_SC;

	ob_end_clean();
	if ($_SC['gzipcompress'] && function_exists('ob_gzhandler')) {
		ob_start('ob_gzhandler');
	} else {
		ob_start();
	}
}
 

 

function xml_out($content) {
	global $_SC;
	@header("Expires: -1");
	@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
	@header("Pragma: no-cache");
	@header("Content-type: application/xml; charset=$_SC[charset]");
	echo '<'."?xml version=\"1.0\" encoding=\"$_SC[charset]\"?>\n";
	echo "<root><![CDATA[".trim($content)."]]></root>";
	exit();
}
 

 

2、sstripslashes

//去掉slassh
function sstripslashes($string) {
	if(is_array($string)) {
		foreach($string as $key => $val) {
			$string[$key] = sstripslashes($val);
		}
	} else {
		$string = stripslashes($string);
	}
	return $string;
}
 

这里就是递归地将数组里的字符串反转义,也就是原来是123\'123的现在变成123'123

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Uchome2.0 WAP插件.rar

    《Uchome2.0 WAP插件:深入解析与应用》 Uchome2.0 WAP插件是一款专为Uchome社区系统设计的移动访问增强工具,旨在优化用户在手机等移动设备上浏览社区论坛的体验。WAP(Wireless Application Protocol)是无线应用...

    UCenter+UChome完整搭建包(php+mysql+问题解决文档)

    UCenter_Home_2.0_SC_UTF8.zip zlib-1.2.3.tar.gz Linux,window下php环境搭建[first].doc Linux下PHP环境搭建[second].doc Mysql远程登录及常用命令.doc UCenter 1.5.0 安装图文教程.doc UCenter Home 2.0 安装方法...

    yoho完整版(uchome2.0_discuz7.2_shopex4.8整合)

    《yoho完整版:uchome2.0、discuz7.2与shopex4.8的完美整合详解》 在互联网社区建设与电子商务领域,一套高效、稳定的平台整合方案至关重要。"yoho完整版(uchome2.0+discuz7.2+shopex4.8整合)"正是这样一款解决...

    uchome2.0 数据字典.doc

    《UCHOME2.0数据字典》文档详细解析 在互联网社区建设中,UCHOME是一款广泛应用的开源社区建站系统,其2.0版本在功能和性能上进行了显著的优化和提升。本文档《UCHOME2.0数据字典.doc》针对该系统的核心——数据...

    Uchome1.2 1.5 代码学习 common.php

    `include_once()`函数用于包含`function_common.php`,这是一个公共函数库,包含了大量常用函数,如字符串处理、数组操作等。接着,`dbconnect()`函数建立与数据库的连接,确保后续的数据操作得以进行。 `data_...

    uchome 2.0 VIP插件

    **UChome 2.0 VIP插件详解** UChome 2.0 VIP插件是一款专为UChome社区平台设计的高级功能组件,它主要用于实现社区网站的VIP会员制度,提供会员增值服务,增强用户粘性和社区活跃度。这款插件包含交易明细功能,...

    [论坛社区]webim插件 for UCHOME_webim.zip源码PHP项目源代码下载

    [论坛社区]webim插件 for UCHOME_webim.zip源码PHP项目源代码下载[论坛社区]webim插件 for UCHOME_webim.zip源码PHP项目源代码下载 1.适合个人搭建网站项目参考 2.适合学生毕业设计搭建网站参考 3.适合小公司搭建...

    UCenter Home开发文档大全

    uchome二次开发之function_cache.php.doc uchome登陆机制分析.doc uchome二次开发中最常使用的一些通用方法.doc UCHOME的基本体系结构全面大解析.doc uchome插件开发学习《记账本》插件.doc UCHome 如何设置数据库...

    QFarm4.3_Beta4_20100523.1000.rar_QQ farm uchome_qfarm ucho_uchom

    "更新日志(4.3).txt"记录了这次版本更新的具体内容和改进,对开发者和用户来说都是了解版本变化的重要文档。"4.3B3升级到B4要升级数据库.txt"同样与升级过程有关,可能详细列出了升级数据库的步骤。"安装&升级"目录...

    完美整合Uchome2.0(开心农场等插件) for PhpWind7.3.2~7.5.rar

    一、PHPWIND7.3.2,7.5正式版完美整合UCHOME(开心农场等...2.下载 UCenter Home 2.0 整合 PhpWind 5.x/6.x/7.x 论坛的集成安装包(原先为1.5的升级到2.0详见下载包) 教程:http://www.52xxzx.cn/read.php?tid=497

    UCenterHome开发文档大全

    uchome二次开发之function_cache.php.doc uchome登陆机制分析.doc uchome二次开发中最常使用的一些通用方法.doc UCHOME的基本体系结构全面大解析.doc uchome插件开发学习《记账本》插件.doc UCHome 如何设置数据库...

    uchome2.0+一键转贴插件

    uchome2.0+一键转贴插件 本插件由开源插件网(sns.zhisoo.com)提供。 激励的文章!奋斗的捷径!成功的法则!创业的技巧!奋进的环境! 更重要的是你可以找到与你志趣相同的网友!一起探讨奋斗的目标! 加入我们...

    UCHOME 2.0最终版完美整合QQ登录

    此补丁只针对最终版的UCHOME2.0版本。其它版本略有不同,容后推出相应的补丁包 3. 目前此补丁包是接入QZone的,如果安装此补丁后不久就要转向DISCUZ/DISCUZX系列,那么请慎重选择此补丁,因为DISCUZ/DISCUZX是接入...

    uchome2.0商家点评正式版

    《UCHome2.0商家点评正式版:搭建与管理指南》 UCHome2.0商家点评正式版是一款基于PHP和MySQL构建的社区平台,专为商家与用户互动提供了一个全面的解决方案。它允许用户对商家的产品和服务进行评价,促进商家与消费...

    Uchome函数及注释

    ### Uchome函数及注释知识点详解 #### 1. Uchome函数概述 Uchome是一款基于PHP语言开发的社区软件,它提供了丰富的功能来支持社区管理和用户体验。本文档将详细解读Uchome中的一些关键函数及其作用,帮助开发者更好...

    uchome 2.0 vip 充值插件

    UChome 2.0 是一款基于PHP和MySQL的开源社区建站系统,它为用户提供了一个强大的平台来搭建社交网络站点。VIP 充值插件是 UChome 2.0 的一个重要组成部分,它允许用户通过购买VIP会员资格来获取更多高级功能和服务。...

    uchome2.0友情链接

    《UCHome2.0 友情链接:搭建与管理指南》 在互联网世界中,网站间的相互连接犹如现实社会中的关系网,而“友情...在使用 UCHome2.0_link_pack 压缩包时,请按照文件内的说明进行操作,以确保正确安装和配置友链模块。

    uchome2.0问答插件

    《UCHome2.0问答插件详解与安装指南》 在互联网社交平台中,互动问答功能已成为提升用户活跃度和社区黏性的关键要素之一。UCHome2.0问答插件正是这样一款为社区用户打造的专业问答工具,它旨在增强用户之间的交流,...

Global site tag (gtag.js) - Google Analytics