背景是:大网站用nfs来文件共享
问题:当对文件写入频繁的时候,会出现缓存文件会写坏的情况
原因:是写的时候没有锁文件,nfs不支持文件锁
解决方案:1)用
memcache 来锁,2)用数据库来保存文件内容
- function writeover($fileName, $data, $method = 'rb+', $ifLock = true, $ifCheckPath = true, $ifChmod = true) {
- $fileName = S::escapePath($fileName, $ifCheckPath);
- touch($fileName);
- $memcache = new memcache_file();
- if ($ifLock === true) {
- if ($memcache->add($fileName, 1)) {
- $handle = fopen($fileName, $method);
- $ifLock && flock($handle, LOCK_EX);
- $writeCheck = fwrite($handle, $data);
- $method == 'rb+' && ftruncate($handle, strlen($data));
- fclose($handle);
- $ifChmod && @chmod($fileName, 0777);
- $memcache->delete($fileName);
- return $writeCheck;
- } else {
- return false;
- }
- } else {
- $handle = fopen($fileName, $method);
- $ifLock && flock($handle, LOCK_EX);
- $writeCheck = fwrite($handle, $data);
- $method == 'rb+' && ftruncate($handle, strlen($data));
- fclose($handle);
- $ifChmod && @chmod($fileName, 0777);
- $memcache->delete($fileName);
- return $writeCheck;
- }
- }