[不断更新]打算一直在这里写技术文章。我是菜鸟,高手莫砸
时间:2006-05-25
来源:互联网
请大家精神上支持就好了,不用发“支持”,“顶”,“不错”,之类的回帖。
当然,有错漏的地方,还请高手们多多指出,谢谢。
顺便再次声明一下:我是菜鸟,高手末砸
[[i] 本帖最后由 machine_马 于 2006-5-31 05:41 编辑 [/i]]
作者: machine_马 发布时间: 2006-05-24
作者: mayi 发布时间: 2006-05-25
老大你的page类在哪里呢?
作者: forest 发布时间: 2006-05-25
作者: forest 发布时间: 2006-05-25
作者: PHPChina 发布时间: 2006-05-30
作者: forest 发布时间: 2006-05-30
代码:
The code test!作者: forest 发布时间: 2006-05-30
最近在做点东西,涉及到分页,老是使用面向过程的也不是办法,由于刚学不久,
看得代码不多,也就没怎么去搜别人的分页类。再加上上次看了几个,看得眼睛
花花的,所以就自己写了一个。个人感觉它使用起来还是蛮简单的,
最少两行就可以完成分页的准备工作了,大家可以看看。如果结合smarty
使用,则更加方便。不过考虑到不是每个人都使用smarty,所以这里只给出了普通
的使用例子。相信使用smarty的朋友,也能很轻松的操作这个类。
希望能帮到大家
************************************************************************/
代码:
<?class machine_page{
var $title_count=0;//帖子总数
var $title_rows=10;//每页显示多少行
var $show_page=7;//每页显示多少个跳转页号
var $page_count=0;//共有多少页
var $current_page=1;//当前页
var $start=0;//开始记录
var $prve_lpage=0;//上一大页
var $next_lpage=0;//下一大页
var $page_arr=array();//开始记录
function machine_page($count,$current_page=1,$title_rows=10,$show_page=7){//构造函数
$this->title_count=(int)$count;//获取传入的帖子总数
$this->current_page=(int)$current_page;//获取当前页
$this->title_rows=(int)$title_rows;//显示多少行
$this->show_page=$show_page;//每页显示多少个跳转页号
$this->count_page();//调用计算页数的方法
$this->return_page_arr();//调用返回跳转页号的方法
}
function count_page(){//计算页数
//计算共有多少页
@$this->page_count=ceil($this->title_count/$this->title_rows);
//防止$this->title_rows意外等于0时的错误
$this->page_count=(int)$this->page_count;
//如果当前页大于最大页数,则使其等于最大页数;如果当前页小于1,则使其等于1
if ($this->current_page>$this->page_count)$this->current_page=$this->page_count;
if ($this->current_page<1)$this->current_page=1;
//计算查询的开始记录数
$this->start=($this->current_page-1)*$this->title_rows;
}
function return_page_arr(){//返回页面跳转页号的函数
//用当前页除以显示页数得到当前是第几“大页”
$start_s=floor($this->current_page/$this->show_page);
/*
如果当前页号正好整除显示页数,则应该对$start_s减一,因为设想一下,如果当前是第7页
显示页数也是7,则$start_s=1,也就是说已经到了第二“大页”了,而实际上它应该还是在
第一“大页”
*/
if ($this->current_page%$this->show_page==0)$start_s--;
//计算开始页号,算法是当前“大页”*显示页数+1;例如0*7+1=1,1*7+1=8,2*7+1=15
$start_page=$start_s*$this->show_page+1;
//上一大页
$this->prve_lpage=$start_page-1;
//下一大页
$this->next_lpage=$start_page+$this->show_page;
//开始循环计算当前大页中的小页号
for ($i=0;$i<$this->show_page;$i++){
//如果下一个页号已经超出了总页数,则说明应该停止了
if ($start_page+$i>$this->page_count)break;
//将页号记录在$this->page_arr数组中
$this->page_arr[]=$start_page+$i;
}
}
}
?>
操作方法
一、简单操作:
1、//取得当前页号
$current_page=(int)$_GET['page'];
2、//统计帖子数
$title_count=…………//这里大家可以采用自己的方法来统计
3、//使用分页类
$page_obj=new machine_page($title_count,$current_page);
二、完全操作
1、//取得当前页号
$current_page=(int)$_GET['page'];
2、//统计帖子数
$title_count=…………//这里大家可以采用自己的方法来统计
3、//使用分页类
$page_obj=new machine_page($title_count$current_page,10,7);
大家注意到,我只是在加了两个参数10,7这两个表示什么呢?
10表示每页显示10行,7表示显示7个跳转页号。
什么是跳转页号呢?例如,当你在查看1-7页的时候,将显示1 2 3 4 5 6 7
当你在查看第8-14页的时候将显示8 9 10 11 12 13 14
下面说这个类的使用:
这个类将返回这些属性
1:$page_obj->start 查询的起始位置,例:select … limit $page_obj->start,10
2:$page_obj->title_rows 查询返回的行数,例:limit $page_obj->start,$page_obj->title_rows
4:$page_obj->page_arr 代表页面跳转页号的数组,例如1234567(注意,它是一个数组)
5:$page_obj->page_count 代表共有多少页
6:$page_obj->title_count 代表共有多少帖
7:$page_obj->prve_lpage 这个是用来向上翻“大页”的,例如当前如果是第9页,那么上一个大页的
的末尾就应该是7,如果当前是第17页,那么上一个大页的末尾就是14
8:$page_obj->next_lpage 这个是用来向下翻“大页”的,例如当前如果是第4页,那么下一个大页的
开始页就应该是8,如果当前是第9页,那么下一个大页的开始页就是15
下面给出使用例子
<?
///////准备工作
include_once('lib/machine_page.class.php');
$conn=mysql_connect('localhost','root','123456');
mysql_select_db('web');
///////统计帖子数
$rs=mysql_query('select count(*) as num from tit_title');
$title_count=mysql_fetch_assoc($rs);
/*
假设你的url为:'http://localhost/yitian/php1.php?x=5&y=abc&z=18&page=3
其中page表示我们要跳到第3页,$x,$y,$z这三个是用于你程序中的其他的参数
现在我们来获取url参数
*/
$page=abs((int)$_GET['page']);//其他的参数值是用于举例子,这个参数才是关键。
//之所以放这三个参数,是因为有人问我这个类能不能传递其他参数,所以这里给出例子。
$x=$_GET['x'];
$y=$_GET['y'];
$z=$_GET['z'];
//////现在开始分页,每页显示2帖,显示3 个跳转页
$page_obj=new page($title_count['num'],$page,2,3);
//////现在取出我们要查询的帖子
$sql='select * from tit_title limit '.$page_obj->start.','.$page_obj->title_rows;
$title_query=mysql_query($sql);
while ($title_rs=mysql_fetch_assoc($title_query)) {
$title[]=$title_rs;
}
//////显示出我们查询的内容
echo '<pre>';
print_r($title);
/////配置跳转页
$url='http://localhost/yitian/php1.php?x='.$x.'&y='.$y.'&z='.$z.'&page=';
echo "<br><a href='".$url.$page_obj->prve_lpage."'><<</a> ";
echo "<a href='".$url.($page_obj->current_page-1)."'>上一页</a> ";
foreach ($page_obj->page_arr as $value){
if ($page_obj->current_page==$value){
echo '<b>'.$value.'</b> ';
}else {
echo "<a href='".$url.$value."'>".$value."</a> ";
}
}
echo "<a href='".$url.($page_obj->current_page+1)."'>下一页</a> ";
echo "<a href='".$url.$page_obj->next_lpage."'>>></a>";
/*将输出以下结果
Array
(
[0] => Array
(
[title_id] => 9
[title_bid] => 7
[title_user_id] => 1
[title_username] => machine-马
[title_leibie] => 0
[title_title] => ssssssssssssssssssssssaaaaaaaaa
[title_clicks] => 0
[title_rbacks] => 0
[title_haoping] => 0
[title_wondeful] => 1
[title_rtime] => 1145736425
)
[1] => Array
(
[title_id] => 14
[title_bid] => 8
[title_user_id] => 1
[title_username] => msr182
[title_leibie] => 0
[title_title] => ddddddddddddddddddddddddd
[title_clicks] => 0
[title_rbacks] => 0
[title_haoping] => 0
[title_wondeful] => 0
[title_rtime] => 1145931949
)
)
<< 上一页 1 2 3 下一页 >>
*/
?>
作者: machine_马 发布时间: 2006-05-31
刚写的一个表单验证,看了一些其他的表单验证觉得麻烦,就自己乱写了一个
我是菜鸟,高手末砸
************************************************************************/
代码:
<?phpfunction machine_check_fill( $check_arr = array() )
{
$pattern['id_name'] = array('!^[a-z0-9]{3,8}$!i' , '您输入的用户名格式不正确');
$pattern['nick_name'] = array('!^.{4,12}$!' , '您输入的用户昵称格式不正确');
$pattern['email'] = array('!^[a-z0-9]+(\.[a-z0-9]+)?@[a-z0-9]+\.[a-z0-9]+(\.[a-z0-9]+)?$!i' , '您输入的电子邮箱格式不正确');
$pattern['password'] = array('!^[a-z0-9]{6,14}$!i' , '您输入的密码格式不正确');
$pattern['real_name'] = array('!^.{4,20}$!' , '您输入的真实姓名格式不正确');
$pattern['id_card'] = array('!^[0-9]{15}([0-9]{2}[a-z0-9])?$!i' , '您输入的身份证号码格式不正确');
$pattern['title'] = array('!^.{1,255}$!' , '您输入的帖子标题格式不正确');
$pattern['content'] = array('!^.{1,}$!' , '您输入的帖子内容格式不正确');
$err_msg='';
if ( !is_array($check_arr) )
{
return '对不起,表单参数传递错误';
}
foreach ($check_arr as $key => $value)
{
if ( empty($pattern[$key]) )
{
return '对不起,该表单验证项不存在';
}
if( !preg_match($pattern[$key][0], $value) )
{
$err_msg.=$pattern[$key][1].'<br>';
}
}
return $err_msg;
}
?>
$id_name=$_POST['id_name'];
$password=$_POST['password'];
echo machine_check_fill(array('id_name'=>$id_name,'password'=>$password));
作者: machine_马 发布时间: 2006-05-31
说一下数据的导出和导入
************************************************************************/
数据的导出,一般我使用的方法是:select * from table1 into outfile 'c:/123.txt';
通过这条语句,我们可以把table1中的所有数据导入到C盘下的123.txt文件中。
字段与字段之间默认是用制表符分隔的,即'\t'。而行与行之间默认则使用'\n'分隔的
如果想使用其他的符号来分隔字段,可以这样做:select * from table1 into outfile 'c:/123.txt' fields terminated by ',';
如果想使用其它的符号来分隔行,则可以:select * from table1 into outfile 'c:/123.txt' lines terminated by ',';
但是需要注意的是,123.txt文件必须事先是不存在的,该文件由指令创建。如果123.txt已经存在,则会报错:
“ERROR 1086 (HY000): File 'C:/123.txt' already exists”
类似的,我们可以使用这样的语句来创建一个电子表格select * from table1 into outfile 'c:/123.xls';
数据的导入相对导出来说则要麻烦一点。
load data infile'c:/123.txt' into table table1;
通过这条语句,我们把刚才导出的文件123.txt中的内容又导回table1表,不过这个时候要注意几点:
1:如果你的表中有 primary key 或者 unique 字段,那么导回的数据不能与原有的数据冲突。比方说,你的表中name字段是unique类型的
那么,如果他已经有了一个值'machine',那么这个时候,你导入的数据在该字段上也有machine的话,
则会提示错误,但是错误发生之前的数据还是会被插入到数据库。意思就是:部分被插入了。
2:如果你的表中有 auto_increment 字段的话,那么导回之前,该表必须是空的,否则也会报错
3:上面我们说了可以将数据导入到电子表格中,那么是否能从电子表格中把数据到回到数据库呢?
这里要分情况讨论,如果电子表格中的数据是通过select into outfile导出生成的,则可以再通过load date导回,
但是如果电子表格中的数据是你自己敲入的,那么则不可以通过load date导回,原因是数据库无法识别电子表格使用的分隔符。
这个时候我们可以先把电子表格中的数据另存为.txt格式,保存时选择“制表符分隔”,这样我们就可以导入那些用电子表格保存的数据了
作者: machine_马 发布时间: 2006-05-31
代码:
/************************************************************************刚才说了导出导入,现在再来说一下 主键、索引 、唯一
************************************************************************/
主键:又称为主键索引,即主键本身就是一个索引,它最能代表该表中每条数据的唯一性,可以称为每条数据的唯一标识。表1的主键在表2中可以作为外键来关联表1。
比方说这个例子:
班级表(记为表1)有class_id这个字段,他代表班级号,是表1的主键。学生表(记为表2)有stu_id class_id这两个字段,其中stu_id是表2的主键,他代表每个学生的学号,而class_id就是外键,代表了这个学生在哪个班,它用来关联表1。
在查询速度上,利用主键索引查询要比普通索引查询速度快。主键索引必定是唯一的,并且值得注意的是,可以将几个字段设为一个主键索引,例如你可以把用户表中的id 和 name这两个字段设置为主键索引。那么,只有当id 和 name字段上同时出现重复时,才会出错。
例如:id name 或者 id name
0 msr 0 msr
1 msr 0 msr182
这样的数据是可以的,但是下面的这个就不可以
id name
0 msr
0 msr
索引:即普通索引,当某个字段使用率非常高时。例如,我们select * from table where name='machine' 当name字段使用非常频繁时,就应该给该字段加一个普通索引,建立索引能提高查询的速度
唯一:又称为唯一索引,首先,它是一个普通索引,不同在于它不能有重复值,如果试图插入重复值,则会提示错误
总的来说,建立索引是为了提高查询速度,但是建立索引会牺牲掉一部分数据库空间。并且,建立索引会降低插入数据、更新数据的速度
作者: machine_马 发布时间: 2006-05-31
代码:
/************************************************************************一个清理代码的程序,它可以清理一个目录下的所有的asp或者php的程序
这个程序有什么用呢?比方说当我们手上有一套asp写的系统,你们发现它
的美工作得很好,想拿来用php重写。于是,你们需要删除掉每个文件中的
asp代码部分,一行一行的查找,然后把它们删除,这样工作量是不是很大
呢?并且很容易删错删漏。于是我就做了这个程序,它可以自动地帮你完成
上述功能。这个程序是很久以前写的了,还不是很完善,以后有时间再把它
完善一下。
使用的时候,把一下代码直接复制为一个php文件就行了。
************************************************************************/
<?php
class clear{
var $old_dir;//被替换文件存放路径
var $save_dir;//替换后文件保存路径
var $save_dir2;//替换后文件保存路径
var $file_name;
var $file_count=array();//纪录替换成功了多少个文件
var $fail_count=array();//纪录替换失败了多少个文件
var $language;//设定要替换的语种
function clear($old_dir='',$save_dir='newdir',$language='asp'){
//判别文件或者目录是否存在
if(!file_exists($old_dir))die('对不起,您输入的文件或者目录不存在,请检查输入');
$save_dir=str_replace('\\','/',$save_dir);
$save_dir=str_replace('//','/',$save_dir);
if(substr($save_dir,-1,1)!='/')$save_dir.='/';
$old_dir=str_replace('\\','/',$old_dir);
$old_dir=str_replace('//','/',$old_dir);
$this->language=$language;
$this->save_dir=$save_dir;
$this->file_count=array();
//如果传入的是一个文件则:
if(preg_match('{\.(asp|php|html|htm)$}i',$old_dir)){
$this->old_dir=$old_dir;
$this->file_name=basename($this->old_dir);//获取文件名
$this->clear_do();
//如果传入的是一个文件夹则:
}elseif(!preg_match('{\..*$}i',$old_dir)){
if(substr($old_dir,-1,1)!='/')$old_dir.='/';
$this->xunhuan($old_dir,$save_dir);
}else{
echo '您的文件或者目录地址输入有误,请检查输入';
}
}
function xunhuan($old_dir,$save_dir){
@$dir=opendir($old_dir);
if(!$dir){
return;
}
while(false!==($f=readdir($dir))){
//如果当前是文件则直接替换
if(preg_match('{\.(asp|php|html|htm)$}i',$f)){
$this->old_dir=$old_dir.$f;
$this->save_dir=$save_dir;
$this->file_name=basename($this->old_dir);//获取文件名
$this->clear_do();
//如果当前是目录则继续打开
}elseif(!preg_match('{\..*$}i',$old_dir.$f)){
$this->xunhuan($old_dir.$f.'/',$save_dir.$f.'/');
}
}
}
function clear_do(){
$content=$this->read_file();//获取文件内容
$new_content=$this->tihuan($content);//实现替换
$this->put_in($new_content);//保存到新目录
}
function read_file(){
$fp=fopen($this->old_dir,'rb') or die('文件打开失败');
@$content=fread($fp,filesize($this->old_dir));
if(!$content)$this->fail_count[]=$this->old_dir;
fclose($fp);
return $content;
}
function tihuan($content){
switch($this->language){
case 'asp'fuhao='%';break;
case 'php'fuhao='\?';break;
case 'script'fuhao='script';break;
default:die('你选择的程序语言不在本替换系统执行范围内');
}
return preg_replace('{<'.$fuhao.'.*'.$fuhao.'>}Us','',$content);
}
function put_in($new_content){
if(!file_exists($this->save_dir))@mkdir($this->save_dir);
if(!file_exists($this->save_dir))die('对不起,您输入的文件保存路径'.$this->save_dir.'有误,请检查输入');
$fp=fopen($this->save_dir.$this->file_name,'wb');
$finish=fwrite($fp,$new_content);
fclose($fp);
if($finish!==false){
$this->file_count[]='文件'.$this->file_name.'里的'.$this->language.'代码已经清理成功,并且已保存到<a href="'.$this->save_dir.'" target="blank">'.$this->save_dir.'</a>目录<br>';
return TRUE;
}else{return FALSE;}
}
}
$old_dir=$_POST['old_dir'];
$save_dir=$_POST['save_dir'];
$language=$_POST['language'];
if(!empty($old_dir)&&!empty($save_dir)&&!empty($language)){
$clear=new clear($old_dir,$save_dir,$language);
$ok=1;
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
<!--
.STYLE1 {font-size: 14px}
.STYLE3 {font-size: 13px}
-->
</style>
</head>
<body leftmargin="0" topmargin="0">
<script language="javascript">
function re(){
if(document.tihuan.upfile.value==''||document.tihuan.save_dir.value==''){
alert('对不起,请将数据填写完整')
return false;
}
document.tihuan.old_dir.value=document.tihuan.upfile.value
}
</script>
<br>
<table width="500" border="1" align="center" cellpadding="0" cellspacing="0">
<form name="tihuan" action="index.php" method="post" onSubmit="return re()">
<input type="hidden" name="old_dir" value="">
<tr>
<td height="40" colspan="2" align="center"><span class="STYLE1">存放目录请使用绝对路径,例如:C:/Apache2/htdocs/test/newdir/<br>
您可以选择替换单个文件,也可以选择替换整个目录<br>
如果您需要替换整个目录,只要把目录的路径完整输入就可以了<br>
为了安全起见,请不要选择存放目录为您的原始目录<br>
程序如果遇到同名的文件,会将它覆盖掉</span></td>
</tr>
<tr>
<td width="149" height="20"><span class="STYLE3">需要清理代码的页面路径</span></td>
<td width="345"><input name="upfile" type="file" size="30" /></td>
</tr>
<tr>
<td height="20"><span class="STYLE3">清理之后页面的存放路径</span></td>
<td><input name="save_dir" type="text" size="40" /></td>
</tr>
<tr>
<td height="20"><span class="STYLE3">请选择您需要替换的语言</span></td>
<td align="center"><span class="STYLE3"><input name="language" type="radio" value="asp" checked />
ASP
<input type="radio" name="language" value="php" />
PHP
<input type="radio" name="language" value="script" />
SCRIPT </span></td>
</tr>
<tr>
<td height="20" colspan="2" align="center"><input type="submit" name="Submit" value="提交" /></td>
</tr>
</form>
</table>
<?
if($ok==1){
echo '<table width="500" border="1" align="center" cellpadding="0" cellspacing="0">
<tr><td height="300" align="center" valign="top">
<p class="STYLE1">清理完成</p><span class="STYLE3">';
foreach($clear->file_count as $value)echo '<p>'.$value.'</p>';
echo '</span></td></tr>';
if(!empty($clear->fail_count)){
echo '<tr><td valign="top" align="center"><p class="STYLE1">清理失败</p><span class="STYLE3">';
foreach($clear->fail_count as $value2)echo $value2.'<br></span></td></tr>';
}
echo '</table>';
}
?>
</body>
</html>
作者: machine_马 发布时间: 2006-05-31
这段时间学校搞文化艺术节,累死。有段时间没上来写东西了,今天赶紧补
一个我半年之前写的模版类,现在看来是无比的幼稚,现在都使用smarty了,
不过可以从这个类来分析一下模版的一些原理,讲得不好,高手末砸
************************************************************************/
代码:
<?class moban{
var $url;//设置模版路径
function moban($url=''){//构造函数
if(empty($url))$this->wrong('系统错误:模板文件路径不能为空','die');
if(!file_exists($url))$this->wrong('系统错误:找不到模板文件');
$this->url=$url;//设置模板存放路经
}
function duqu(){//读取模板文件函数
@$tpl=file_get_contents($this->url);//读取模板内容,如果模板为空,将发生错误
if(!$tpl)$this->wrong('系统错误:模板文件为空','die');
return $tpl;//返回模板内容
}
function tihuan($yuansu=array(),$tpl=''){//替换普通元素函数
if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取原始模板
if(empty($yuansu))$this->wrong('系统错误:替换元素为空','die');
//对元素进行替换 key为模板变量value为模板值
foreach($yuansu as $key=>$value){//根据传入数组,替换模板中的变量
$tpl=str_replace('{'.$key.'}',$value,$tpl);
}
return $tpl;//返回替换后模板
}
function xunhuan($yuansu=array(),$tpl=''){//替换循环元素
if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取
if(!is_array($yuansu)||empty($yuansu))$this->wrong('系统错误:循环替换元素为空','die');
//$xht_l为循环体的开始标签,$xht_r为循环体的结束标签,$pattern为正则匹配模式
$xht_l=str_replace('}','(\|.+)*}',key($yuansu));
$xht_r=str_replace('{','{/',key($yuansu));
$pattern='!'.$xht_l.'.+'.$xht_r.'!USsi';
$block_arr=array();
preg_match($pattern,$tpl,$block_arr);//用正则表达式查询循环模块,并将其输出到$block_arr数组
$block=$block_arr[0];//获取模块的内容
//对元素进行替换,key为模板变量,value为模板值
foreach(current($yuansu) as $key=>$vlaue){
$block=str_replace('{'.$key.'}',$vlaue,$block);
}
$block=preg_replace('!'.$xht_l.'!UsS','',$block);
$block=str_replace($xht_r,'',$block);
return $block;//返回替换后模块
}
//替换模块元素,$xht_l为循环体的开始标签,$value为用来替换的值,$block为被替换的模块
function block_th($xht_l='',$value='',$block=''){
if(empty($xht_l))$this->wrong('系统错误:板块替换传入错误','die');
if(empty($block))$block=$this->duqu();
//$pattern为正则匹配模式
$xht_r=str_replace('{','{/',$xht_l);//$xht_r为循环体的结束标签
$xht_l=str_replace('}','(|.+)*}',$xht_l);
$pattern='!'.$xht_l.'.+'.$xht_r.'!Usi';//配置匹配模式
$block=preg_replace($pattern,$value,$block);//进行替换
//删除掉循环标签
$block=str_replace($xht_l,'',$block);
$block=str_replace($xht_r,'',$block);
$block=str_replace('<!---->','',$block);
return $block;//返回被替换后的模块
}
}
?>
代码:
首先我们先假设一个temp/test.html的模版文件,它的内容为:<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
{name}的年龄是:{age},性别是:{sex}
<br />
以下是他的从小学到大学所在学校的情况
<{xunhuan}>
<li>{part}:{school}</li>
<{/xunhuan}>
</body>
</html>
代码:
function moban($url=''){//构造函数if(empty($url))$this->wrong('系统错误:模板文件路径不能为空','die');
if(!file_exists($url))$this->wrong('系统错误:找不到模板文件');
$this->url=$url;//设置模板存放路经
}
该函数为本类的构造函数,在实例化的同时,设置模版的存放路径$url,后面的程序要通过这个值来找到模版存放的地方,然后才能进行替换
例:这个例子只是简单的实例化了moban类,并且设置将要被替换的模版文件的路径为temp目录中的test.html文件
<?
$moban = new moban('temp/test.html')
?>
代码:
function duqu(){//读取模板文件函数@$tpl=file_get_contents($this->url);//读取模板内容,如果模板为空,将发生错误
if(!$tpl)$this->wrong('系统错误:模板文件为空','die');
return $tpl;//返回模板内容
}
该函数用来读取模版文件的内容,它将整个模版文件读出,并保存到$tpl变量中
例:实例化moban类,并且设置将要被替换的模版文件的路径为temp目录中的test.html文件,然后将模版文件的内容显示出来
<?
$moban = new moban('test.html');
echo $moban->duqu();
?>
它将把模版的内容原封不动地显示出来:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
{name}的年龄是:{age},性别是:{sex}
<br />
以下是他的从小学到大学所在学校的情况
<{xunhuan}>
<li>{part}:{school}</li>
<{/xunhuan}>
</body>
</html>
代码:
function tihuan($yuansu=array(),$tpl=''){//替换普通模版变量的函数if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取原始模板
if(empty($yuansu))$this->wrong('系统错误:替换元素为空','die');
//对元素进行替换 key为模板变量value为模板值
foreach($yuansu as $key=>$value){//根据传入数组,替换模板中的变量
$tpl=str_replace('{'.$key.'}',$value,$tpl);
}
return $tpl;//返回替换后模板
}
该函数用来替换普通的模版变量,先看参数$tpl是否为空,如果为空则通过duqu()函数读入模版的内容并且放到$tpl变量中。然后查看传入的$yuansu变量,如果为空则提示错误。接下来是主要的替换部分,通过上面的例子我们可以知道,$yuansu实际上是一个类似这样的数组
$yuansu=array('name'=>'machine_马','age'=>'23','sex'=>'男')
{name}、{age}、{sex}这三个就是模版变量。而machine_马、23、男这三个就是我们实际想显示的值,通过循环调用str_replace函数,我们逐个的将模版$tpl中的模版变量替换为我们想要的值,然后返回替换后的$tpl(即替换后的模版)
例:
<?
$moban =new moban('test.html');
$yuansu=array('name'=>'machine_马','age'=>'23','sex'=>'男');
$tpl=$moban->tihuan($yuansu);
echo $tpl;
?>
它将显示:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
machine_马的年龄是:23,性别是:男 <!-----------注意这里---->
<br />
以下是他的从小学到大学所在学校的情况
<{xunhuan}>
<li>{part}:{school}</li>
<{/xunhuan}>
</body>
</html>
代码:
function xunhuan($yuansu=array(),$tpl=''){//替换循环元素
if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取
if(!is_array($yuansu)||empty($yuansu))$this->wrong('系统错误:循环替换元素为空','die');
//$xht_l为循环体的开始标签,$xht_r为循环体的结束标签,$pattern为正则匹配模式
$xht_l=str_replace('}','(\|.+)*}',key($yuansu));
$xht_r=str_replace('{','{/',key($yuansu));
$pattern='!'.$xht_l.'.+'.$xht_r.'!USsi';
$block_arr=array();
preg_match($pattern,$tpl,$block_arr);//用正则表达式查询循环模块,并将其输出到$block_arr数组
$block=$block_arr[0];//获取模块的内容
//对元素进行替换,key为模板变量,value为模板值
foreach(current($yuansu) as $key=>$vlaue){
$block=str_replace('{'.$key.'}',$vlaue,$block);
}
$block=preg_replace('!'.$xht_l.'!UsS','',$block);
$block=str_replace($xht_r,'',$block);
return $block;//返回替换后模块
}
[ 本帖最后由 machine_马 于 2006-8-8 23:19 编辑 ]
作者: machine_马 发布时间: 2006-06-06
作者: fnet 发布时间: 2006-06-06
作者: PHPChina 发布时间: 2006-06-07
看来要有段时间不能来这里了
唉~~~~~~~~~~~~~~考试真痛苦
作者: machine_马 发布时间: 2006-06-07
作者: Phzzy 发布时间: 2006-06-08
作者: szy_session1987 发布时间: 2006-06-08
“能推荐些好的php5+apache+mysql的学习教程吗?顺便给说说php的学习路线和学习方法,好让初学者少走弯路”
这段话中的"php5"提换成"asp"的执行效率
测试过程是 数据库中有467,834条相同数据
把他们全部取出来 然后replace掉一部分信息
计算所花的时间。每种情况都执行了10次 去掉一个最大的 去掉一个最小的 然后取平均值
(我的机子是 p4 2.8G,512DDR)
结果是:
用mysql的replace花的时间为12.7909291089
用php的str_replace花的时间为14.1444325149
用php的preg_replace花的时间为16.3556557894
用php的ereg_replace花的时间为18.5530973673
希望能帮到大家
[ 本帖最后由 machine_马 于 2006-6-12 11:43 编辑 ]
作者: machine_马 发布时间: 2006-06-12
好久没来了,这次带来个大的咚咚
-----数据库的构架
相信很多人都需要吧
这个构架也是没有做完的,提前放上来给大家参考
还有,构架中很多东西都是我自己想的
所以肯定有很多不够优化的地方,希望大家多多指出
************************************************************************/
###############################
### 板 块 表 ###
###############################
板块分类表 bolck_part
|--part_id 板块的id
|--part_layer 板块的层次结构(采用000000三层模式,例如020509代表第2板块下的第5个分板块中的第9个子板块)
|--part_name 板块的名称
|--part_jj 板块的简介
|--part_notice 板块的公告
|--part_titles 板块的帖子数
|--part_wonds 板块的精华帖数
|--part_show 是否显示(Y:一直显示,N:是管理员才显示)
================================
板块权限表 bolck_limit
|--limit_part_id 对应的板块id
|--limit_fatie 发帖权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)
|--limit_image 发图权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)
|--limit_visit 访问权限(a:任何人都可以访问,b:注册后才可以访问,c:是管理员<指所有的>才可以访问,d:对本版有管理权限的管理员才可以访问)
|--limit_rar 发rar/zip附件权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)
|--limit_office 发doc、xls、pdf等附件权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)
###############################
### 用 户 ###
###############################
用户信息表user_inf
|--inf_id 用户id
|--inf_idname 用户名
|--inf_username 昵称
|--inf_password 用户密码
|--inf_sex 性别B男,G女
|--inf_touxiang 头像
|--inf_email email
|--inf_oicq oicq
|--inf_qianming 签名
|--inf_dele_nums 被删帖次数
|--inf_ptitles 发帖次数
|--inf_rtitles 回帖次数
|--inf_won_counts 精华帖数
|--inf_shengwang 声望值
|--inf_haoping 好评数
|--inf_banzhu 该用户是否为版主 N不是,Y是
|--inf_reg_check 是否通过审核
|--inf_pingfen 当天还可以评的分数
|--inf_ping_time 最后一次评分的时间
|--inf_reg_time 注册时间
|--inf_free_time 该用户的释放时间(如果为0则说明该用户没被监禁)
|--inf_msg 是否有新短消息(0表示没有,0以上的数字表示当前有几封新短消息)
|--inf_log_time 最后登陆时间
|--inf_log_counts 登陆次数
================================
用户感兴趣的板块表 user_block
|--block_inf_id 关联用户id
|--block_part_id 关联感兴趣板块的id
|--block_index 感兴趣板块的显示顺序
================================
版主信息表 user_banzhu
|--banzhu_inf_id 关联用户id
|--banzhu_part_id 关联板块id
###############################
### 帖 子 ###
###############################
主帖表 tit_article
|--article_id 主帖id----主键
|--article_part_id 帖子所属版块id
|--article_inf_id 主帖作者id
|--article_leibie 主帖类别
|--article_title 主帖标题
|--article_content 主帖内容
|--article_xinqing 心情
|--article_pic 表情
|--article_upfile 是否有附件,N否Y是
|--article_clicks 点击数
|--article_rbacks 回复数
|--article_haoping 好评数
|--article_agree 是否通过审查,N否Y是
|--article_top 是否为置顶,N否Y是
|--article_wondeful 是否为精华帖,N否Y是
|--article_delete 是否被逻辑删除,N否Y是
|--article_print_time 发表时间
|--article_update_time 最后更新时间(用于帖子排序)
|--article_click_time 最后访问时间(用于批量删除帖子)
|--article_ip 发帖时用户ip
================================
回帖表 tit_rback
|--rback_id 回帖id
|--rback_art_id 被回复帖id
|--rback_agree 是否通过审查,N否Y是
|--rback_del 是否删除,N否Y是
|--rback_inf_id 回帖作者id
|--rback_content 回复内容
|--rback_to 对某人说
|--rback_xinqing 心情
|--rback_pic 表情
|--rback_upfile 是否有附件,0否1是
|--rback_time 回复时间
|--rback_ip 回帖时所在ip
================================
附件管理表 tit_upfile
|--upfile_id 附件的id
|--upfile_part_id 附件所在板块的id
|--upfile_name 附件的文件名
|--upfile_type 附件的类型
|--upfile_msg 附件的说明
|--upfile_art_id 关联主帖的id
|--upfile_rback_id 关联回帖的id
|--upfile_time 附件上传的时间
================================
###############################
### 短消息 ###
###############################
短消息表 small_msg
|--msg_id 短消息的id
|--msg_inf_id 短消息作者id
|--msg_to_inf_id 目标用户id
|--msg_title 短消息标题
|--msg_content 短消息内容
|--msg_card_id 贺卡(关联贺卡库里的文件名就可以了)
|--msg_readed 是否被读,N否Y是
|--msg_post_del 发信人删除信息 N否Y是
|--msg_get_del 收信人删除信息(当两个字段都为Y是才删除本条信息)
|--msg_time 短消息发送时间
================================
贺卡库 card
|--card_id 贺卡id号
|--card_name 贺卡文件名
###############################
### 称 谓 ###
###############################
级别表 honor_great
|--great_id 级别id
|--great_name 级别称谓
|--great_min 该级别下限
|--great_max 该级别上限
================================
人品表 honor_renpin
|--renpin_id 人品id
|--renpin_name 人品称谓
|--renpin_min 该级别下限
|--renpin_max 该级别上限
================================
财富表 honor_caifu
|--caifu_id 财富id
|--caifu_name 财富称谓
|--caifu_min 该级别下限
|--caifu_max 该级别上限
###############################
### 系统配置 ###
###############################
系统基本设置表 system_config
|--config_name 配置名
|--config_value 配置值
web_name 网站名称
web_address 网站地址
web_phone 网站联系电话
web_email 网站联系email
web_cpright 网站版权
web_close 关闭网站
web_close_reason 关闭网站
web_reg_allow 是否关闭新用户注册
web_reg_check 注册验证 0:不需验证,1:管理员验证 2:email验证
web_new_user_time 新手见习时间
web_welcome 欢迎短消息内容
web_titles 每页显示主题数
web_title_allow 是否需要验证新发的帖子
web_rbacks 每页显示回帖数
web_pingfen 每天可以使用的分数
-------------------------------
未完
作者: machine_马 发布时间: 2006-08-01
既然来了,就大放送一组
上传用的函数
************************************************************************/
代码:
<?phpfunction machine_up_file($files='',$max_size=2097152){
$i=0;
$rand_arr=range('a','z');
if (!is_array($files)){
href();
}
foreach ($files as $key=>$arr){
if($arr['error']==0){
if (!is_uploaded_file($arr['tmp_name'])) {
$err_msg.='文件<b>'.$arr['name'].'</b>不可上传<br>';
continue;
} elseif ($_FILES['up_file']['size']>$max_size) {
$err_msg.='文件<b>'.$arr['name'].'上传失败</b>,原因是:文件超过限定大小<br>';
continue;
} elseif (!preg_match('!\.(gif)|(jpg)|(jpeg)|(bmp)|(doc)|(xls)|(wps)|(txt)|(rtf)|(rar)|(zip)!i',$arr['name'])) {
$err_msg.='文件<b>'.$arr['name'].'上传失败</b>,原因是:格式不正确<br>';
continue;
}else{
$hz=strtolower(strstr($arr['name'],'.'));
if(!$hz){
$err_msg.='文件<b>'.$arr['name'].'</b>上传失败,原因是:格式不正确<br>';
continue;
}
shuffle($rand_arr);
$rand_str=join($rand_arr);
$new_url=date('ymdHis').substr($rand_str,-5).$hz;
switch (substr($key,0,6)){
case 'up_ima':
$type='A';
@$ok=move_uploaded_file($arr['tmp_name'],THIS_DIR.'file/up_image/'.$new_url);
break;
case 'up_off':
$type='B';
@$ok=move_uploaded_file($arr['tmp_name'],THIS_DIR.'file/up_office/'.$new_url);
break;
case 'up_rar':
$type='C';
@$ok=move_uploaded_file($arr['tmp_name'],THIS_DIR.'file/up_rar/'.$new_url);
break;
}
if ($ok){
$name_arr=explode('.',$arr['name']);
$ok_url[$i]['name']=$new_url;
$ok_url[$i]['msg']=$name_arr[0];
$ok_url[$i]['type']=$type;
$ok_url[$i]['hz']=$hz;
$i++;
}else {
$err_msg.='文件<b>'.$arr['name'].'</b>上传出错<br>';
continue;
}
}
}else{
$err_msg.='文件<b>'.$arr['name'].'</b>上传出错<br>';
continue;
}
}
$rs=array('ok_arr'=>$ok_url,'err_msg'=>$err_msg,'num'=>$i);
return $rs;
}
?>
作者: machine_马 发布时间: 2006-08-01
PHP代码:
<?php
/************************************************************************
再送一个ubb函数
在这里看这可能很乱
因为我都使用tab键分隔的
如果修改的话太花时间
谁如果需要的话,就把他复制到自己电脑里面看吧
以后有空的时候再来整理一下
************************************************************************/
function machine_out_put($text=''){
global $smarty;
if(!is_object($smarty)){
href();
}
$partern_arr=array(
'!\[B\]!'=>'<B>', '!\[/B\]!' => '</B>',
'!\[I\]!' => '<I>', '!\[/I\]!' => '</I>',
'!\[U\]!' => '<U>', '!\[/U\]!' => '</U>',
'!\[S1\]!' => '<font size=1>', '!\[/S1\]!' => '</font>',
'!\[S2\]!' => '<font size=2>', '!\[/S2\]!' => '</font>',
'!\[S3\]!' => '<font size=3>', '!\[/S3\]!' => '</font>',
'!\[S4\]!' => '<font size=4>', '!\[/S4\]!' => '</font>',
'!\[S5\]!' => '<font size=5>', '!\[/S5\]!' => '</font>',
'!\[S6\]!' => '<font size=6>', '!\[/S6\]!' => '</font>',
'!\[S7\]!' => '<font size=7>', '!\[/S7\]!' => '</font>',
'!\[BL\]!' => '<font color="black">', '!\[/BL\]!' => '</font>',
'!\[DR\]!' => '<font color="darkred">', '!\[/DR\]!' => '</font>',
'!\[LB\]!' => '<font color="lightblue">', '!\[/LB\]!' => '</font>',
'!\[DB\]!' => '<font color="darkblue">', '!\[/DB\]!' => '</font>',
'!\[LG\]!' => '<font color="lightgreen">', '!\[/LG\]!' => '</font>',
'!\[GR\]!' => '<font color="green">', '!\[/GR\]!' => '</font>',
'!\[DG\]!' => '<font color="darkgreen"', '!\[/DG\]!' => '</font>',
'!\[PI\]!' => '<font color="pink"', '!\[/PI\]!' => '</font>',
'!\[PU\]!' => '<font color="purple"', '!\[/PU\]!' => '</font>',
'!\[TE\]!' => '<font color="teal"', '!\[/TE\]!' => '</font>',
'!\[LEFT\]!' => '<div align="left">', '!\[/LEFT\]!' => '</div>',
'!\[RIGHT\]!' => '<div align="right">', '!\[/RIGHT\]!' => '</div>',
'!\[CENTER\]!' => '<div align="center">', '!\[/CENTER\]!' => '</div>',
'!\[URL\]http://.*\[/URL\]!i' => '<a href="$0">$0</a>',
'!\[URL\]!' => '', '!\[/URL\]!' => '',
'!\[FC1\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face1.gif" border=0>',
'!\[FC2\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face2.gif" border=0>',
'!\[FC3\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face3.gif" border=0>',
'!\[FC4\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face4.gif" border=0>',
'!\[FC5\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face5.gif" border=0>',
'!\[FC6\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face6.gif" border=0>',
'!\[FC7\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face7.gif" border=0>',
'!\[FC8\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face8.gif" border=0>',
'!\[FC9\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face9.gif" border=0>',
'!\[FC10\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face10.gif" border=0>',
'!\[FC11\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face11.gif" border=0>',
'!\[FC12\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face12.gif" border=0>',
'!\[FC13\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face13.gif" border=0>',
'!\[FC14\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face14.gif" border=0>',
'!\[FC15\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face15.gif" border=0>',
'!\[FC16\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face16.gif" border=0>',
'!\[FC17\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face17.gif" border=0>',
'!\[FC18\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face18.gif" border=0>',
'!\[FC19\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face19.gif" border=0>',
'!\[FC20\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face20.gif" border=0>',
'!\[FC21\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face21.gif" border=0>',
'!\[FC22\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face22.gif" border=0>',
'!\[FC23\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face23.gif" border=0>',
'!\[FC24\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face24.gif" border=0>',
'!\[FC25\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face25.gif" border=0>',
'!\[FC26\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face26.gif" border=0>',
'!\[FC27\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face27.gif" border=0>',
'!\[FC28\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face28.gif" border=0>',
'!\[FC30\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face30.gif" border=0>',
'!\[FC31\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face31.gif" border=0>',
'!\[FC32\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face32.gif" border=0>',
'!\[FC33\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face33.gif" border=0>',
'!\[FC34\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face34.gif" border=0>',
'!\[FC35\]!' => '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face35.gif" border=0>',
);
$text=str_replace(' ',' ',nl2br(htmlspecialchars($text)));
$text=str_replace(chr(9),' ',$text);
$text=preg_replace(array_keys($partern_arr),array_values($partern_arr),$text);
return $text;
}
?>
作者: machine_马 发布时间: 2006-08-01
作者: kenus 发布时间: 2006-08-05
作者: gaotian 发布时间: 2006-09-19
顶了!!!
敬礼!!!!
作者: lmhllr 发布时间: 2006-09-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28