我看到一群使用人是这样的: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