很好的一套PHP树形论坛程序

源代码在线查看: today.php

软件大小: 1394 K
上传用户: GreatMarxist
关键词: PHP 论坛 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

								!function_exists('readover') && exit('Forbidden');
				$filename=D_P.'data/bbscache/today.php';
				$dbtdsize=100;
				if(file_exists($filename)){
					$todaydata=readover($filename);
					if($offset=strpos($todaydata,"\n".$windid."\t")){/*使用精确匹配 必须是"\n".$windid."\t"*/
						$offset+=1;
						if($fp=@fopen($filename,"rb+")){
							flock($fp,LOCK_EX);
							list($node,$yestime)=nodeinfo($fp,$dbtdsize,$offset);/*修改头结点*/
							$nowfp=$offset/($dbtdsize+1);
							if("$nowfp"!=$node && $node!=''){
								fputin($fp,$node,$dbtdsize,$nowfp);/*修改头结点指向的数据段*/
								list($oldprior,$oldnext)=fputin($fp,$nowfp,$dbtdsize,'node',$node);/*修改需要更新的数据*/
								if($oldprior!='node'){
									fputin($fp,$oldprior,$dbtdsize,'M',$oldnext);/*修改前一结点的后趋*/
								}
								if($oldnext!='NULL' && $oldprior!='node'){
									fputin($fp,$oldnext,$dbtdsize,$oldprior);/*修改后一结点的前趋*/
								}
							}
							fclose($fp);
						}
					}else{
						$offset=filesize($filename);
						if($fp=@fopen($filename,"rb+")){
							flock($fp,LOCK_EX);
							list($node,$yestime)=nodeinfo($fp,$dbtdsize,$offset);
							if($node!=''){/*修改头结点*/
								$nowfp=$offset/($dbtdsize+1);
								if($node!='NULL') {
									fputin($fp,$node,$dbtdsize,$nowfp);
								}
								if($node!=$nowfp) fputin($fp,$nowfp,$dbtdsize,'node',$node,Y);/*添加数据*/
							}
							fclose($fp);
						}
					}
				}
				if($yestime!=$tdtime) {
					P_unlink($filename);
					writeover($filename,str_pad("\tNULL\t$tdtime\t",$dbtdsize)."\n");/*24小时初始化一次*/
				}
				function fputin($fp,$offset,$dbtdsize,$prior='M',$next='M',$ifadd='N')
				{
					$offset=$offset*($dbtdsize+1);/*将行数转换成指针偏移量*/
					fseek($fp,$offset,SEEK_SET);
					if($ifadd=='N'){
						$iddata=fread($fp,$dbtdsize);
						$idarray=explode("\t",$iddata);
						fseek($fp,$offset,SEEK_SET);
					}
					if($next!='M' && $prior!='M'){/*说明这一数据是被更改的数据段.需要对其他辅助信息进行更改*/
						global $windid,$timestamp,$onlineip,$winddb;
						$idarray[0]=$windid;$idarray[3]=$winddb['regdate'];
						if($ifadd!='N') $idarray[4]=$timestamp;
						$idarray[5]=$timestamp;$idarray[6]=$onlineip;$idarray[7]=$winddb['postnum'];$idarray[8]=$winddb['rvrc'];
					}
					if($prior=='M') $prior=$idarray[1];
					if($next=='M') $next=$idarray[2];
					$data="$idarray[0]\t$prior\t$next\t$idarray[3]\t$idarray[4]\t$idarray[5]\t$idarray[6]\t$idarray[7]\t$idarray[8]\t";
					$data=str_pad($data,$dbtdsize)."\n";/*定长写入*/
					fwrite($fp,$data);
					return array($idarray[1],$idarray[2]);/*传回数据更新前的上一结点和下一结点*/
				}
				function nodeinfo($fp,$dbtdsize,$offset)
				{
					$offset=$offset/($dbtdsize+1);
					$node=fread($fp,$dbtdsize);
					$nodedb=explode("\t",$node);/*头结点在第二个数据段*/
					if(is_int($offset)){
						$nodedata=str_pad("\t$offset\t$nodedb[2]\t",$dbtdsize)."\n";
						fseek($fp,0,SEEK_SET);/*将指针放于文件开头*/
						fwrite($fp,$nodedata);
						return array($nodedb[1],$nodedb[2]);
					}else{
						return '';
					}
				}
				?>			

相关资源