【发布时间】:2020-02-06 19:36:06
【问题描述】:
当我在多个脚本上运行此功能时,一个脚本会生成警告: fread():长度参数必须大于0
function test($n){
echo "<h4>$n at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$fp = fopen("$n.txt", "r");
$s = fread($fp, filesize("$n.txt") );
fclose($fp);
$fp = fopen("$n.txt", "w");
$s = $_SERVER['HTTP_USER_AGENT'].' '.time();
if (flock($fp, LOCK_EX)) { // acquire an exclusive lock
fwrite($fp, $s);
// fflush($fp);// flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
} else {
echo "Couldn't get the lock!";
}
}
}
我尝试为多个用户写入文件读取,但只有一个用户可以写入文件。我知道当我将 fwrite 与flock - LOC_EX 一起使用时,下一个脚本必须等到写入完成。但是在这里似乎文件大小不会等到写操作完成。我的观点是,当文件大小为 0 时,它会尝试访问文件,因此会产生问题:当文件由原始脚本写入时,将从文件中读取 0 个字节。
是否可以为 fread 功能修复此问题?
这个脚本的目的是测试 fread 的一些限制,并检查我稍后读取的数据,如果数据真的是在我没有使用 fflush 时写入的。
【问题讨论】: