PHP 阻止文件读取
PHP block file from reading
我正在尝试一个简单的算法:
文件 1:(lock.php)
- 打开文件
- 锁定文件,其他 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
?>
问题:
即使应用flock
,Lockstatus.php
也能打开文件。
问题:
如何在 Lockstatus.php
被 Lock.php
锁定后阻止文件读取?
此函数 flock() 在 linux 和 windows 上有不同的行为。
在 PHP 文档上深入了解 "Notes"。这可能是你的问题。
之后注意r+参数,读+锁必选。
$fp = fopen('/tmp/lock.txt', 'r+');
它不适用于 a。
问题是 flock()
只提供咨询锁定。其他程序可能会完全忽略这一点并继续执行 fopen 和 fread 或其他任何操作。关键是在 Lockstatus.php 中使用 flock
以及在执行 fopen
之后检查是否存在锁。 flock
in Lockstatus.php 会失败,然后你就会知道有一个现有的锁。
我正在尝试一个简单的算法:
文件 1:(lock.php)
- 打开文件
- 锁定文件,其他 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
?>
问题:
即使应用flock
,Lockstatus.php
也能打开文件。
问题:
如何在 Lockstatus.php
被 Lock.php
锁定后阻止文件读取?
此函数 flock() 在 linux 和 windows 上有不同的行为。
在 PHP 文档上深入了解 "Notes"。这可能是你的问题。
之后注意r+参数,读+锁必选。
$fp = fopen('/tmp/lock.txt', 'r+');
它不适用于 a。
问题是 flock()
只提供咨询锁定。其他程序可能会完全忽略这一点并继续执行 fopen 和 fread 或其他任何操作。关键是在 Lockstatus.php 中使用 flock
以及在执行 fopen
之后检查是否存在锁。 flock
in Lockstatus.php 会失败,然后你就会知道有一个现有的锁。