我看到一羣使用人是這樣的:PHP的羊羣和FREAD和fwrite
if (!$fp = fopen($file_name, 'wb'))
{
return FALSE;
}
if (flock($fp, LOCK_EX))
{
fwrite($fp, serialize($data));
flock($fp, LOCK_UN);
}
而且這樣的:
if (!$fp = @fopen($file_name, 'rb'))
{
return FALSE;
}
flock($fp, LOCK_SH);
$data = '';
if (filesize($file_name) > 0)
{
$data = unserialize(fread($fp, filesize($file_name)));
}
但是是不是有機會他人將編輯的文件fopen
致電和flock
致電?和fread
編輯同一個問題:
解釋,爲什麼我問這個......我立足我的問題上的代碼here,在MySQL緩存的情況下,有什麼能夠阻止20人從所有能夠同時訪問該文件,如果他們都能進入fopen和flock之間?
是代碼萬無一失嗎?
如果該緩存僅由該特定腳本使用,則不會發生任何情況。如果有人將文件從shell中刪除 - 確實會發生不好的事情。 – favoretti 2012-08-05 20:59:56
是的,但正如另一條評論所述,LOCK_EX並不是像某種方式強迫fread一樣「不會返回」。 – pilcrow 2012-08-05 21:30:43
如果您閱讀了PHP站點上的評論,但實際上確實如此,儘管鎖定是建議性的。也就是說,強制鎖定,例如,Linux只能在明確支持它的文件系統上進行工作,並按照這種方式進行安裝。 – favoretti 2012-08-05 21:35:02