PHP阻止文件读取
我正在尝试一个简单的算法,它说: 文件1:(lock.php)PHP阻止文件读取,php,fopen,fread,flock,Php,Fopen,Fread,Flock,我正在尝试一个简单的算法,它说: 文件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 Sec
- 打开一个文件
- 锁定该文件,以便其他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
也可以打开该文件
问题:
当文件被Lock.php
锁定后,如何在Lockstatus.php
处阻止文件读取?此函数flock()在linux和windows上具有不同的行为
深入查看PHP文档上的“注释”。这可能是你的问题
之后,注意r+参数,读取+锁定是必需的
$fp = fopen('/tmp/lock.txt', 'r+');
它不适用于a此函数flock()在linux和windows上的行为不同
深入查看PHP文档上的“注释”。这可能是你的问题
之后,注意r+参数,读取+锁定是必需的
$fp = fopen('/tmp/lock.txt', 'r+');
它不适用于a问题是
flock()
只提供建议性锁定。另一个程序可能会完全忽略这一点,并继续执行fopen和fread或其他任何程序。关键是在执行fopen
检查是否存在现有锁后,在Lockstatus.php中使用flock
flock()
仅提供建议性锁定。另一个程序可能会完全忽略这一点,并继续执行fopen和fread或其他任何程序。关键是在执行fopen
检查是否存在现有锁后,在Lockstatus.php中使用flock