在一次项目中,由于没有开启模板缓存,每次都是重新编译模板输出,在多进程情况下,就有可能会发生同时写入一个文件的情况,就会发生“缓存写入失败”的错误。
开启模板缓存可以缓解这个错误,但是在缓存失效,重新编译时,又有可能发生这个错误。
所以,可以通过给文件加锁来解决,当前进程加锁,正常写入,其他进程阻塞,等待锁
$fileCache = fopen($tmplCacheFile,"w+"); if(flock($fileCache,LOCK_EX)){ //加锁成功,说明没有进程在写入该文件 fwrite($fileCache,trim($tmplContent)); //解锁 flock($fileCache,LOCK_UN); } fclose($fileCache);