新闻报价汽车商家技术软件 驱动     本站短域名:珠江路.cn、zjlu.net

电脑

数码

办公

网络

汽车

招聘

经销商

珠江路论坛

购物街
首页 新闻 专题 报价库 经销商 驱动 软件 游戏 学院
三大件 主板 显卡 显示器 装机推荐 珠江路渠道特价
手机 DC/DV GPS 笔记本 平板电脑
学院首页 软件应用 编程开发 创意设计
ASP ASP.NET PHP JSP SQL MYSQL Java VB DIV+CSS JavaScript XML

您的位置:电脑学院 >> 编程开发 >> PHP >> 用PHP实现一个文本型小论坛的源码(一)


用PHP实现一个文本型小论坛的源码(一)




第一次总结自己的东西,从哪开始呢?
写一个程序,首先要确定的应是数据结构,因为我们没有用到数据库,所以就从文本文件的结构开始说起。

1、文件名的确定
我们采用time()函数来获取用户发帖时的时间值,做为文件名。这样基本上可以避免了重复文件名的出现。所有与此文章相关的帖子均采用同一个名字加不同的扩展名。

一共设计了三种文件扩展名:

一个是.info 记录了本帖的一些基本信息,结构是:
1:文章标题
2:作者
3:作者email
4:栏目编号
5:点击数
6:回复数

例:965634636.info内容如下
厚重的盔甲应声而落
如霜
ycshowtop@21cn.com
2
23
1

另一个文件是.body 记录了文章的完全内容。就不说了。
最后一种比较复杂一些,用.r0 .r1 .r2 ……来表示回复的评论。
结构是:
1:作者
2:email
3:回应时间
4:回应内容

而.r0表示第1个评论、.r1表示第2个评论……

大家可能注意到了,我们在info文件中没有记录时间,对,我们可以根据文件建立的时间来作为文章发表的时间,所以,嘿嘿…,其实在回复的帖子中我们也可以不记录的,不过我一不小心就……懒的改了。:)
其实这样,程序也好写一点了。


2、目录结构
因为我在info中记录了栏目,就没有按栏目划分目录了。整个网站的目录如下:

/-index.php 等一些基本的程序文件
 |
|___phtml 放各个具体功能的php文件
|
|___images 本站所用的图像文件
|
|___ban 与广告有关的图像文件或其它
|
|___include 一些包含文件,主要是广告栏、友情链接
|
|___page .info and .body
|
|___reply .r0 .r1 .r2 ……

其实文件结构出来了,程序写起来就不困难了,是吧。
现在我们来讨论一下如何显示最新发表的文章和人气最旺的文章。

1、相关函数
先介绍两个用到的函数get_top_time 和 get_top_hit。代码如下:

// 提取标题,按时间排序
//$number 指定所提取的标题个数

function get_top_time($number) {
$dire="page/";
$hd=opendir($dire);
while($fl=readdir($hd)) { //读出此目录下文件
if($fl=="." or $fl=="..") continue;
if(strpos($fl,".info")){ //如果是.info文件,则
$tmp=explode(".",$fl);
$ft=$tmp[0];

//以文件名(不含扩展名)为key,以建立时间为value
$list[$ft]=filemtime($dire.$fl);
}
}
if(count($list)==0) return $list; //如果没有文件,则返回

arsort($list); //排序!!!

for($i=0;$i<$number;$i++) {
$k=key($list);
if($k=="")break;

//取出前number个,打开文件取信息放入二维数组$re_var,以文件名为key。
$fc=file($dire.$k.".info");
$re_var[$k]=$fc;

next($list);
}

return $re_var;
}


//提取标题按点击排序

function get_top_hit($number) {
$dire="page/";
$hd=opendir($dire);
while($fl=readdir($hd)) {
if($fl=="." or $fl=="..") continue;
if(strpos($fl,".info")){
$tmp=explode(".",$fl);
$ft=$tmp[0];
$fc=file($dire.$fl); //打开文件取点击数放入数组中作值
$list[$ft]=chop($fc[4]);
}
}

if(count($list)==0) return $list;
arsort($list);

for($i=0;$i<$number;$i++) {
$k=key($list);
if($k=="")break;
$v=file($dire.$k.".info");
$re_var[$k]=$v;

next($list);
}

return $re_var;
}

?>

2、调用函数方法

先包含进来

include("phtml/getitle.php3");

$r1=get_top_time(10); //取前10个放入二维数组r1中
$r2=get_top_hit(10);

?>

……

if(is_array($r1)){ //只有是数组说明有记录,才列出记录
for($j=0;$j $i=key($r1); //取键值
//如果你还记得.info的文件格式,下面这句话就不用我多说了吧。
echo "".$r1[$i][0]."[".$r1[$i][1]." ".date("Y-m-j",filemtime("page/".$i.".info"))."]
";
next($r1);
}
}
?>

我们已经知道列出最近文章与人气最旺文章的方法,下面我们来看看如何实现发表文章的,其实知道了文件的结构,这一部分是很简单的了。

1、也先介绍一下两个函数

show_err($message);在一个窗口中以定义的格式显示一句错误,应该不用多说吧。就是先作好这个窗口,然后在某个地方显示$message……

判断用户是否给出了一个真实的email地址时,我用到了正则表达式


function is_valid_email_addr($email_addr)
{
return eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email_addr);
}

?>

要不要说这个表达式的含义呢?我看还是免了吧。
大家可以在“PHP中文用户”找到正则表达式的详细说明。

2、发表文章

从addpage.php3中的表单中接收到以下变量(至于表单的结构,限于篇幅,我就不说了):

$name 文本,作者大名
$emailadd 文本,作者email
$item 单选,发表栏目
$title 文本,文章标题
$content 多行文本,文章内容

处理这些变量,如下:


require("err.php3");
require("isemail.php3");

if($name =="" or $emailadd =="" or $title ==""){
//至少得给出大名、email和标题
show_err("发表文章请将信息填写完整!");
exit;
}
else {
if(!is_valid_email_addr($emailadd)) {
//判断一下是否真的是email地址
show_err("别玩我了,朋友!给个真的email吧。");
exit;
}

$c=nl2br($content);//把回车换成


$fbn="http://www.zhujiangroad.com/page/".time(); //这里用当前时间生成文件名

$fp=fopen($fbn.".info","w"); //建立文件,写入信息
fputs($fp,$title."n");fputs($fp,$name."n");fputs($fp,$emailadd."n");
fputs($fp,$item."n");
fputs($fp,"0n");fputs($fp,"0");
fclose($fp);

//改文件属性,因为以后我们要对它进行写操作,加点击数和回复数!!!
chmod($fbn.".info",0777);


$fp=fopen($fbn.".body","w"); //写文章内容
fputs($fp,$c);
fclose($fp);

}
?>

写到这里,我都有点不想写下去了,各位是不是觉得太简单了?!
的确,其实我讲了我的文件结构,想必有很多朋友已经知道这个论坛是如何实现的了。现在我罗嗦的,其实都是一些很基本的PHP语法应用

好了,下一节我们讲如何显示文章与评论。

百度中 用PHP实现一个文本型小论坛的源码(一) 相关内容
Google搜索中 用PHP实现一个文本型小论坛的源码(一) 相关内容
技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·DIV+CSS
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
网络技术
·路由器 ·交换机 ·服务器
·运维管理 ·无线网络 ·布线技术
·网络安全    

相关软件 相关文章
ASP vs PHP on IIS
如何使用PHP中的日期和时间函数
Phorum 安装指南
Windows 2000下安装PHP4及MySQL
仅用PHP4 Session实现的迷你购物篮(二)
Cookie的作用
用邮件来发送表单数据
PHP 4.0.0中session.save_path的bug

相关软件 产品库推荐
·笔记本 ·平板电脑 ·上网本
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU/硬盘/内存 ·音箱 ·主板
·键鼠套装 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

Copyright 2011 www.zhujiangroad.com All Rights Reserved.
珠江路在线版权所有 苏ICP备05016148号
 
关于我们 |  广告服务 |  付款方式 |  南京地图 | 南京公交查询 | 南京火车时刻表 | 站长工具