这样可能解决//PHP版本,很容易改写为C版本//更新文件中的某一行
function update_fline($fp, $mid, $points, $point_time)
{
$buff = $c = '';
$offset_head = $offset_tail = 0; //相应行的开始位置和结束位置(距文件开始位置的字节数)
$is_head = $is_tail = 0; //是否到达了要求的行的开始位置和结束位置
$comma = 0; //逗号的位置标志 rewind($fp); //查找相应行
while(($c = fgetc($fp)) !== false) {
$is_head || $offset_head++;
$offset_tail++; //$buff中只存储每行第一个,前的数据,即MISC_MID
if($c != ',' && !$comma)
$buff .= $c;
else {
if(!$is_head && $c == ',')
(++$comma == 1) && (strcmp($buff, $mid)) || ($is_head = 1);
else if($c == '\n') { //开始读新的一行
$comma = 0;
if(!$is_head)
($buff) && ($buff = '');
else $is_tail = 1;
}
} $is_tail && break; //读到相应行的结尾,停止继续读
} fseek($fp, $offset_head); //定位文件指针到相应行的开始位置 list(, , $points_old,) = fgetcsv($fp, $offset_tail-$offset_head); //读取原来的积分
$points += $points_old;
fwrite($fp, "$mid,1,$points,$point_tmp");
}
function update_fline($fp, $mid, $points, $point_time)
{
$buff = $c = '';
$offset_head = $offset_tail = 0; //相应行的开始位置和结束位置(距文件开始位置的字节数)
$is_head = $is_tail = 0; //是否到达了要求的行的开始位置和结束位置
$comma = 0; //逗号的位置标志 rewind($fp); //查找相应行
while(($c = fgetc($fp)) !== false) {
$is_head || $offset_head++;
$offset_tail++; //$buff中只存储每行第一个,前的数据,即MISC_MID
if($c != ',' && !$comma)
$buff .= $c;
else {
if(!$is_head && $c == ',')
(++$comma == 1) && (strcmp($buff, $mid)) || ($is_head = 1);
else if($c == '\n') { //开始读新的一行
$comma = 0;
if(!$is_head)
($buff) && ($buff = '');
else $is_tail = 1;
}
} $is_tail && break; //读到相应行的结尾,停止继续读
} fseek($fp, $offset_head); //定位文件指针到相应行的开始位置 list(, , $points_old,) = fgetcsv($fp, $offset_tail-$offset_head); //读取原来的积分
$points += $points_old;
fwrite($fp, "$mid,1,$points,$point_tmp");
}
解决方案 »
- web根目录里有两个index.html 请高手指点
- 高手帮忙看下,return的问题.
- 不同服务器上两个数据库如何连接处理
- 想详细了解header()函数,不知道有它有什么用
- 好几年没上csdn了,今天突然想来看看,随便假设一个问题,大家随便聊聊吧,分数多多给哦……
- 求一个文字围绕图片网页PHP代码
- 如何在php中弹出可弹出网页与
- php.ini 中report error 被关闭了如何在调试时显示错误信息?
- echo"<script>alert('error!');history.back();</script>";怎么返回后原来填写的数据都没有了??
- PHP的officeCOM对象编程
- 如何得到指定相对路径的绝对路径
- 怎么分别读取文本框的文本并插入相应sql
首先,有几十个这样的文件,每个文件的读操作和写操作都有并发,在这种情况下,写入临时文件,然后删除、改名等,显然不可行,而且你的方案极易产生碎片。
而且执行频率很高,并且需要实时更新和显式,这样显然不能使用数据库。
谢谢joycheney。关于文件,是做了索引处理和并发控制。