php的写文件并发问题谁遇见过? - PHP进阶讨论
现在写了一个访问统计访问人数,网站的访问量每天也就几千人,结果发现统计结果有时会出问题,使用APACHEAB高流量测试更能发现问题,确定问题是出在file_put_con...
现在写了一个访问统计访问人数,网站的访问量每天也就几千人,结果发现统计结果有时会出问题,使用APACHE AB 高流量测试更能发现问题,确定问题是出在file_put_contents??未完成就被另一个file_get_contents读取为 NULL,使用了排他型锁定仍然无法解决问题。请问该如果解决读写文件并发问题?为什么加锁也没有用?
展开
2013-10-31
展开全部
[php]/** * safe_file_put_contents() 一次性完成打开文件,写入内容,关闭文件三项工作,并且确保写入时不会造成并发冲突 * * @param string $filename * @param string $content * @param int $flag * * @return boolean */ function safe_file_put_contents($filename, & $content) { $fp = fopen($filename, \'wb\'); if ($fp) { flock($fp, LOCK_EX); fwrite($fp, $content); flock($fp, LOCK_UN); fclose($fp); return true; } else { return false; } }[/php][php]/** * safe_file_get_contents() 用共享锁模式打开文件并读取内容,可以避免在并发写入造成的读取不完整问题 * * @param string $filename * * @return mixed */ function safe_file_get_contents($filename) { $fp = fopen($filename, \'rb\'); if ($fp) { flock($fp, LOCK_SH); clearstatcache(); $filesize = filesize($filename); if ($filesize > 0) { $data = fread($fp, $filesize); } else { $data = false; } flock($fp, LOCK_UN); fclose($fp); return $data; } else { return false; } }[/php]不知道能否解决你的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-31
展开全部
[php]file_put_contents(sys_get_temp_dir() . \'/test.txt\', new foo(), LOCK_EX);[/php]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-31
展开全部
多谢各位了问题找到了我不小心把锁定用的常量给加了引号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询