首页 > 编程技术 > php

简单的页面缓冲技术(三)

发布时间:2016-11-25 16:53

ontent.php3文件用来处理动态页面。用户可以通过content.php3?page=id号来读出一个数据文件。具体方法我就不说了,大家只要知道每个数据文件都有一个不同的id号,这样content.php3?page=id号的方式就可以唯一标识一个数据文件。

第1-3行,生成临时文件名。将'?','&'等字符替换成'_'。
第4行,判断临时文件名是否存在,如果有则执行第18-22行,并结束。
第6-13行,判断与生成动态页面有关的文件修改时间与临时文件哪个更新,设置重新生成标志。在这里使用  filemtime()来得到最后修改时间。
第24-41行,利用模板类生成动态结果,放在变量中。关于模板的处理可以参考《模板,PHPLIB处理方式》一文。
第43-50行,生成临时文件。此处对文件进行了加锁处理,以象写冲突。
第51行,输出结果。

  这就是我的处理,大家可以自行修改。

  缓冲是一项有意义的技术,可以提高访问速度,减少系统消耗。不过方法可能有多种多样,大家可以自由发挥。
 

很多问题都是因为中文问题造成的
如文件名最好别用中文
现在的解决方法一般是产生一个ID,将这个ID做文件名
网页上如果url带汉字也经常出错
现在的解决方法一般用urlencode编码
现在用了这个转化,就好多了
原理:利用多维数组
1.添加索引
2.遍历数组
<?
$d=array(
array("a",-20319),
array("ai",-20317),
array("an",-20304),
array("ang",-20295),
array("ao",-20292),
array("ba",-20283),
array("bai",-20265),
array("ban",-20257),
array("bang",-20242),
array("bao",-20230),
array("bei",-20051),
array("ben",-20036),
array("beng",-20032),
array("bi",-20026),
array("bian",-20002),
array("biao",-19990),
array("bie",-19986),
array("bin",-19982),
array("bing",-19976),
array("bo",-19805),
array("bu",-19784),
array("ca",-19775),
array("cai",-19774),
array("can",-19763),
array("cang",-19756),
array("cao",-19751),
array("ce",-19746),
array("ceng",-19741),
array("cha",-19739),
array("chai",-19728),
array("chan",-19725),
array("chang",-19715),
array("chao",-19540),
array("che",-19531),
array("chen",-19525),
array("cheng",-19515),
array("chi",-19500),
array("chong",-19484),
array("chou",-19479),
array("chu",-19467),
array("chuai",-19289),
array("chuan",-19288),
array("chuang",-19281),
array("chui",-19275),
array("chun",-19270),
<?php
/**
* 函数 data_box
* 功能 根据模板输出数据源中的内容
* 参数
* $fun 回调函数,必须提供。作用是从数据源中读取数据。要求返回的最好是关联数组
* $source 数据源,必须提供。可以是数组或查询结果
* $template 模板,可以没有。未提供模板时用标准表格输出数据
* 模板格式:
* array(top=>"",block=>"",fool=>"")
* 其中:
* top 开始部分
* block 可重复部分,变量为关联数组的键,形如$IN_varname。其中前导的IN_可省略
* fool 结束部分
*/
function data_box($_fun,$_source,$_template="") {
$_ar = $_fun(&$_source);
if($_template == "") {
while(list($k,) = each($_ar)) {
$th .= "<th>$k</th>";
$td .= "<td>$IN_$k</td>";
}
$_template = array(top=>"<table border><tr>$th</tr>",block=>"<tr>$td</tr>",fool=>"</table>");
}else if(! preg_match("/$IN_w+/",$_template[block]))
$_template[block] = preg_replace("/[$](w*)/U","$IN_1",$_template[block]);
$buf = eval("return "$_template[top]";");
do {
extract($_ar, EXTR_PREFIX_ALL, "IN");
$buf .= eval("return "$_template[block]";");
}while($_ar = $_fun(&$_source));
$buf .= eval("return "$_template[fool]";");
return $buf;
}
function get_data($source) {
if(list($k,$v) = each($source))
return $v;
return false;
}
$arr = array(
array(a=>1,b=>2,c=>3,11,12,31),
array(a=>11,b=>12,c=>13,11,12,131)
);
echo data_box("get_data",$arr);
echo data_box("get_data",$arr,array(top=>"列表测试<select>",block=>'<option value=$a>$b',fool=>"</select><br>"));
大家都知道,rename()函数可以对文件或目录进行重命名的操作。其实它还可以做很多事情。
熟悉unix的朋友应该知道shell命令mv,它相当与win32的移动,而且移动的同时可进行重命名。我发现,php的rename()函数就相当于mv,它不仅仅只有简单的重命名的功能,同样可以改变文件甚至整个目录的路径。
例如:
$oldpath ----文件或目录原来路径
$newpath ----新定义路径
那么 rename($oldpath,$newpath)就可以完成文件/目录移动的操作
经过我的测试,win32和unix的php4版本都支持这个功能。
另外,好象php4的win32版取消了unlink()函数。那么还可以巧用rename()函数来完成删除的操作,例如:
$path ---- 文件或目录路径
$tmp ---- tmp目录(/tmp)
用rename($path,$tmp) 将文件移动到tmp目录.

前几天我在oso论坛上问有没有这个源程序,没人回复。终于下定决心移植一个这样的函数,感谢网友Keyes提供移植用的Delphi源代码。其调用方式为$txt=big5togb($txt)。
(注:源代码中的include "data_big5.php";这个文件在就是一个数组,在http://caocao.oso.com.cn/data_big5.zip,请编辑下载到oso上,做一个链接,因为这个文件我过几天就要删除了。)
<?
/***********************************************************************
Written by caocao
caocao@eastday.com
http://caocao.oso.com.cn
With the help of Keyes
Keyes2000@263.net
http://my-wjl.scu.edu.cn/~Keyes
***********************************************************************/
function isbig5($code)
{
if (strlen($code)>=2)
{
$code=strtok($code,"");
if (ord($code[0]) < 161)
{
return (0);
}
else
{
if (((ord($code[1]) >= 64)&&(ord($code[1]) <= 126))||((ord($code[1]) >= 161)&&(ord($code[1]) <= 254)))
{
return (1);
}
else
{
return (0);
}
}
}
else
{
return (0);
}
}
function big5offset($code)
{
if (strlen($code) >= 2)
{
$code=strtok($code,"");
if ((ord($code[1]) >= 64)&&(ord($code[1]) <= 126))
{
return ((ord($code[0]) - 161) * 157 + (ord($code[1]) - 64));
}
if ((ord($code[1]) >= 161)&&(ord($code[1]) <= 254))
{
return ((ord($code[0]) - 161) * 157 + 63 + (ord($code[1]) - 161));
}
}
return (-1);
}
function wordtostring($code)
{
return (chr(hexdec(substr($code,0,2))).chr(hexdec(substr($code,2,2))));
}
function big5togb($code)
{
include "data_big5.php";
$output="";
$length=strlen($code);
$code=strtok($code,"");
$idx=0;
while ($idx < $length)
{
标签:[!--infotagslink--]

您可能感兴趣的文章: