PHP 阻止文件读取

PHP block file from reading

我正在尝试一个简单的算法:

文件 1:(lock.php)

文件 2:(lockstatus.php)

我的代码实现:

Lock.php:

<?php
$f = fopen("key",'a');
if (flock($f, LOCK_EX | LOCK_NB)) {
    echo "File Locked. For Next 60 Seconds\n";
    sleep(60);
    var_dump(flock($f, LOCK_UN)); //release lock
    echo "lock released";
} else {
    echo "blocked";
}
?>

Lockstatus.php

<?php
do {
    echo "\n";
    $f = fopen("key",'a');
    if ($f) {
        echo "Readable\n";
        fclose ($f);
    } else {
        echo "Blocked! I am waiting\n";
        sleep(10);
    }
} while (!$f); //wait until fopen does not work
?>

问题: 即使应用flockLockstatus.php也能打开文件。

问题:

如何在 Lockstatus.phpLock.php 锁定后阻止文件读取?

此函数 flock() 在 linux 和 windows 上有不同的行为。

在 PHP 文档上深入了解 "Notes"。这可能是你的问题。

flock on PHP Docs

之后注意r+参数,读+锁必选。

$fp = fopen('/tmp/lock.txt', 'r+');

它不适用于 a

问题是 flock() 只提供咨询锁定。其他程序可能会完全忽略这一点并继续执行 fopen 和 fread 或其他任何操作。关键是在 Lockstatus.php 中使用 flock 以及在执行 fopen 之后检查是否存在锁。 flock in Lockstatus.php 会失败,然后你就会知道有一个现有的锁。