采用PEAR来缓冲PHP程序

 更新时间:2016年11月25日 15:20  点击:1953
PHP 世界中缓冲是一个热门的话题,因为 PHP 产生的动态页面,每次用户请求都需要重新计算,不论请求的结果是否一样,同时,PHP 每次都会编译一次脚本。这样的超负荷运转对一个流量很高的网站来说肯定难以忍受。幸运的是, Web 的结果可以缓冲,而不需要重新运行和编译脚本,商品化的产品像 ZendCache 或者开源的 Alternate PHP Cache都提供了把 PHP 脚本编译为字节代码并缓冲的办法。
PEAR 的缓冲包提供了缓冲动态内容,数据库查询和 PHP 函数调用的框架。
就像 Perl 有 CPAN, TeX 有 CTAN,PHP 也有自己的中心资源库,存放类,库和模块。这个库称为 PEAR(PHP Extension and Add-On Repository)。
本文假设你已经安装了 PEAR 环境,如果没有的话,可以去 PHP 网站下载。

PEAR 的缓冲包包含一个总体的缓冲类和几个特别的子类。缓冲类使用容器类来存贮和管理缓冲数据。
下面是 PEAR 缓冲当前所包含的容器,以及各自的参数:
file -- file 容器在文件系统存储了缓冲的数据,是最快的容器。
cache_dir -- 这是容器存储文件的目录。
filename_prefix -- 缓冲文件的前缀,例如:"cache_"。
shm -- shm 容器把缓冲数据放入共享内存,基准测试显示,目前的实现下,这个容器的速度要比文件容器慢。
shm_key -- 共享内存使用的键值。
shm_perm -- 使用共享内存数据段的权限。
shm_size -- 分配共享内存的大小。
sem_key -- 信号灯的键值。
sem_perm -- 信号灯的权限。
db -- PEAR 的数据库抽象层。
dsn -- 数据库连接的 DSN 。可以参考 PEAR 的 DB 文档。
cache_table -- 表的名字。
phplib -- phplib 容器使用数据库抽象层存储缓冲。
db_class
db_file
db_path
local_file
local_path
ext/dbx -- PHP 的数据库抽象层扩展,如果像把缓冲存入数据库,可以采用这个容器。
module
host
db
username
password
cache_table
persistent
使用 PEAR Cache 所得到的性能提升取决于你所选择的缓冲容器,例如,把数据库的结果再次存入数据库缓冲中就显得毫无意义。
PEAR Cache 的函数缓冲模块能把任何函数或者方法的结果缓冲,不论是 PHP 的内置函数还是用户自定义函数,他缺省采用文件容器,把缓冲数据放入到一个叫做
function_cache 的目录。

Cache_Function 类的构造器可以有三个可选的参数:
这个文档描述如何安全显示的有格式的用户输入。我们将讨论没有经过过滤的输出的危险,给出一个安全的显示格式化输出的方法。
没有过滤输出的危险
如果你仅仅获得用户的输入然后显示它,你可能会破坏你的输出页面,如一些人能恶意地在他们提交的输入框中嵌入
javascript脚本:
This is my comment.
<script language="javascript:
alert('Do something bad here!')">.
这样,即使用户不是恶意的,也会破坏你的一些HTML的语句,如一个表格突然中断,或是页面显示不完整。

只显示无格式的文本
这是一个最简单的解决方案,你只是将用户提交的信息显示为无格式的文本。使用htmlspecialchars()函数,将转化全部的字符为HTML的编码。
如<b>将转变为&lt;b&gt;,这可以保证不会有意想不到的HTML标记在不适当的时候输出。
这是一个好的解决方案,如果你的用户只关注没有格式的文本内容。但是,如果你给出一些可以格式化的能力,它将更好一些

Formatting with Custom Markup Tags
用户自己的标记作格式化
你可以提供特殊的标记给用户使用,例如,你可以允许使用...加重显示,...斜体显示,这样做简单的查找替换操作就可以了:
$output = str_replace("", "<b>", $output);
$output = str_replace("", "<i>", $output);
再作的好一点,我们可以允许用户键入一些链接。例如,用户将允许输入[link="url"]...[/link],我们将转换为<a href="">...</a>语句
这时,我们不能使用一个简单的查找替换,应该使用正则表达式进行替换:
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">', $output);
ereg_replace()的执行就是:
查找出现[link="..."]的字符串,使用<a href="..."> 替换它
[[:graph:]]的含义是任何非空字符,有关正则表达式请看相关的文章。

在outputlib.php的format_output()函数提供这些标记的转换,总体上的原则是:
调用htmlspecialchars()将HTML标记转换成特殊编码,将不该显示的HTML标记过滤掉,
然后,将一系列我们自定义的标记转换相应的HTML标记。
<?php

function format_output($output) {
/****************************************************************************
在PHP编程中, 我们经常会遇到一些直接产生输出的函数, 如passthru(),readfile(), var_dump() 等. 但有时我们想把这些函数的输出导入到文件中,或者先经过处理再输出, 或者把这些函数的输出作为字符串来处理.
这时我们就要用到 Output Buffer(输出缓冲) 函数了.

处理输出缓冲的函数主要有这么几个:
ob_start() 开始输出缓冲, 这时PHP停止输出, 在这以后的输出都被转到一个内部的缓冲里.
ob_get_contents() 这个函数返回内部缓冲的内容. 这就等于把这些输出都变成了字符串.
ob_get_ length() 返回内部缓冲的长度.
ob_end_flush() 结束输出缓冲, 并输出缓冲里的内容. 在这以后的输出都是正常输出.
ob_end_clean() 结束输出缓冲, 并扔掉缓冲里的内容.
举个例子, var_dump()函数输出一个变量的结构和内容, 这在调试的时候很有用.
但如果变量的内容里有 < , > 等HTML的特殊字符, 输出到网页里就看不见了. 怎么办呢?
用输出缓冲函数能很容易的解决这个问题.
ob_start();
var_dump($var);
$out = ob_get_contents();
ob_end_clean();
这时var_dump()的输出已经存在 $out 里了. 你可以现在就输出:
echo '<pre>' . htmlspecialchars($out) . '</pre>' ;
或者等到将来, 再或者把这个字符串送到模板(Template)里再输出.



PHP中的面向对象功能支持 C++ 式的 :: 运算符号!!!
//孤狼:这个::在PEAR中可是频频出现,第一次见的时候搞的我莫名其妙 :)
这个特色文档没有任何说明,但是却有着很好的使用价值。
举一个简单的例子:
比如你以前有很多收集的函数库,你想转向 OOP 方式编程,但是还不能做到完全的封装。
 这个特色提供你一个OOP风格的实现。
你定义一个 Util 类:
class Util {
//将所有的函数剪辑到这里
//这个类可以没有任何成员函数
}
然后在你原先使用函数的地方,比如 someFunction(), 修改成:
Util::someFunction(). 这对你需要封装,但是不需要任何成员函数非常有用。
看你的域名服务器了
如果用别人的,什么都不用你做
打电话告诉对方你要解析到什么IP就可以
如果自己的,那么首先要作的是你的域名的域名服务器是你的机器
比如:aaa.com注册信息里域名服务器是ns1.aaa.com
确定后,建立自己的DNS服务器
服务器名叫NS1,所属域就是aaa.com
WIN2K或者NT就直接在WINDOWS组件里添加DNS服务
然后控制面板的管理工具里会多出来一个DNS控制器
打开,本地机器右键,[默认的所有选择都是右键菜单]
新建域,aaa.com
新建主机ns1 IP 你的IP
接下来就可以建立WWW服务器了
新建主机 www IP就是你的WWW的IP了
重新启动DNS
OK
linux或者类UNIX
机器名NS1,所属域 aaa.com
然后安装BIND,一般发行套件里都有默认选项
安装好以后,配置NAMED服务
/etc/named.conf
加上本地域,其内容如下
options {
    directory "/var/named";
};
zone "." {
    type hint;
    file "named.ca";
};
zone "aaa.com"{
    type master;
    file "aaa.com";
};
然后新建该域文件:
/var/named/aaa.com
内容:
aaa.com.    IN    SOA    ns1.aaa.com. hostmaster.ns1.aaa.com (
       2000120820
       3600
       900
       1209600
       43200 )
aaa.com.    IN    NS    ns1.aaa.com.
aaa.com.    IN    A    DNS服务器的IP或者其他都可以
ns1    IN    A    DNS服务器的IP
www    IN    A    WWW服务器的IP
重起DNS服务
这样就算完了

[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • Python爬取微信小程序通用方法代码实例详解

    这篇文章主要介绍了Python爬取微信小程序通用方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-29
  • 微信小程序手势操作之单触摸点与多触摸点

    这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20