PHP 中的文件鎖定功能非常的不穩定。特別是和PHP 的版本 和 平台也有很大的關系。今天看了Zend_Search_Lucence 中的解決方案是這樣的:
先flock 一個文件,lock的模式是:flock($file, LOCK_EX | LOCK_NB),如果下一個進程再次訪問 $file, 那麼因為無法再獲取 flock 的鎖定了,所以會返回一個false,代表文件被鎖定了,不能再進行訪問了。
在 Zend_Search_Lucence 鎖定的時候主要是:寫索引 讀取索引 優化索引。
關於 LOCK_NB :
在linux 下面支持的比較好,但是windows 上,直到 php 5.2.1 才支持。
所以,要使用 Zend_Search_Lucence 最好 PHP 5.2.1 以上的版本。
如果版本低於 PHP 5.2.1,進程會一直等待下去(因為windows下, 低於PHP 5.2.1 版本不支持非阻塞模式的鎖定)。
關於更新索引:更新索引的時候,索引經常會被鎖定。所以不推薦即時的更新索引,建議晚上訪問量比較小的時候再去更新索引。