Вы должны проверить этот комментарий на странице flock
документов .
По существу, flock
приостановит выполнение, пока не сможет получить блокировку. Возьмите следующий код, который похож на вашу ситуацию выше:
$file = 'file.txt';
$first = fopen($file, "w");
flock($first, LOCK_EX);
$second = fopen($file, "w");
# Your script will pause on the next line until timeout
# due to the inability to obtain a lock.
flock($second, LOCK_EX);
Однако вы можете получить неблокирующие блокировки, например:
flock($file, LOCK_EX | LOCK_NB);
Я не уверен, есть ли негативные последствия для блокировки файлов таким способом. Кроме того, , в то время как документы говорят, что LOCK_NB
не работает в Windows, я просто протестировал его, и он работал на моей машине . Итак, вы можете сделать что-то подобное в вашем CoreLib_Api_File_Package::write
методе:
class CoreLib_Api_File_Package
{
public static function write(array $options)
{
if ( ! $file->flock(LOCK_EX | LOCK_NB))
{
throw new CoreLib_Api_Exception('Unable to obtain lock on file');
}
}
}
Ваш текущий тест должен пройти как написано. Кроме этого, я не могу думать ни о чем.
Редактировать: Они должны пройти, пока вы говорите PHPUnit
, что следует ожидать исключения CoreLib_Api_Exception
(просто указывает на него, потому что в вашем примере его не было).