共享访问:如何解决“ fread():长度参数必须大于0”?

问题描述 投票:0回答:2

当我在多个脚本上运行此功能时,一个脚本会生成警告:fread():Length参数必须大于0

function test($n){
  echo "<h4>$n at ".time()."</h4>";
  for ($i = 0; $i<50; $i++ ){
   $start = microtime(true);

  $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的情况下是否确实写入了数据。

php fread filesize flock
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.