【发布时间】:2019-10-01 15:53:32
【问题描述】:
我目前正在尝试阻止读取已存在且包含内容的文件。我正在使用flock 方法来尝试阻止正在运行的脚本的其他实例访问它,但它不起作用。这只是多核服务器的问题。
while ($aEvent = current($aEvents)){
$sLockFile = '/var/tmp/'.md5($aEvent['id']).'.LCK';
$oFile = fopen($sLockFile, 'c+');
if (flock($oFile, LOCK_EX) && fgets($oFile) == '') {
fwrite($oFile, 'locked');
fclose($oFile);
} else {
fclose($oFile);
next($aEvents);
continue;
}
/*
* Do stuff here.
*/
next($aEvents);
}
因此,从这段代码中,我希望创建、锁定和写入文件,并且任何尝试随后读取/写入文件的请求要么在 flock 调用或空检查时停止。实际上,如果代码同时受到足够多的 ajax 请求,则同一文件被创建/覆盖多次。有什么方法可以保证 PHP 线程的安全吗?
【问题讨论】:
标签: php ajax file asynchronous file-locking