我有个站,每天,会员登陆一次,都会将会员名称、时间和IP地址保存到一个txt文件中程序先读取该txt文件内容,赋值给变量,然后再将会员的登陆信息加到该变量后面串起来,再保存txt文件一般情况下没有什么问题但是现在网站访问量非常大,会员登陆特别频繁,某个时间段登陆的人特别多这样就导致了登陆日志的txt文件的日志内容变得残缺不全我想可能是某个会员登陆时,读取txt文件后,又有其他会员同时登陆,提前写入,结果搞得这个txt文件内容,一天下来,经常从某个时间段之前的记录都没有了有没有什么办法解决这个问题?好像有写入文件前,可以先锁定这个文件?写完后再解锁?如果A会员登陆时,锁定了txt文件,正好B会员也登陆,碰巧要写入txt文件,怎么办?
写操作:
//WRITE
$fp = fopen("test.txt", 'ab');
flock($fp, LOCK_EX);
fwrite($fp, 'Just A Test String.......');
flock($fp, LOCK_UN);
fclose($fp);
读操作:
//READ
$fp = fopen("test.txt", 'r');
flock($fp, LOCK_SH);
//Read from the file.......
flock($fp, LOCK_UN);
fclose($fp);
?>
网上很多例子。
杯具,我是用file_put_contents写文件保存的,晕
锁文件时为了防止偶然出现的写冲突,如果写冲突频繁发生,显然是仅靠文件锁是不能完成的
日志是只写的,发生写冲突的概率较低
而你是需要有修改操作的,写冲突的概率至少要翻一番
http://code.google.com/p/memcacheq/downloads/list
file_put_contents($file, $content, FILE_APPEND|LOCK_EX);
这样试试看效果如何,最近一两天就会看到测试结果