В настоящее время я пытаюсь предотвратить чтение файла, если он уже существует и в нем есть содержимое. Я использую метод 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?