Php 共享访问:如何修复;fread():长度参数必须大于0;?

Php 共享访问:如何修复;fread():长度参数必须大于0;?,php,fread,filesize,flock,Php,Fread,Filesize,Flock,在多个脚本上运行此函数时,一个脚本生成警告: 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.tx

在多个脚本上运行此函数时,一个脚本生成警告: 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!";
    }

  }
}
功能测试($n){
回显“$n at.time()”;
对于($i=0;$i
功能测试($n){
回显“$n at.time()”;
对于($i=0;$i 0)
{
$s=fread($fp,filesize($n.txt));
fclose($fp);
$fp=fopen($n.txt,“$w”);
$s=$\u服务器['HTTP\u用户\代理'].''.'。时间();
如果(flock($fp,LOCK_EX)){//获取一个独占锁
fwrite($fp,$s);
//fflush($fp);//在释放锁之前刷新输出
flock($fp,LOCK_UN);//释放锁
}否则{
echo“拿不到锁!”;
}
}
其他的
{
echo“文件大小必须大于0”;
}
}
}
请将$s变量名称更改为使用相同的东西两次
错误发生在上述三行的中线。

首先,这三行可以重写为一行,如下所示:

$s = file_get_contents("$n.txt");
然而,这些并不是必需的,因为这三行代码在您的代码中是完全冗余的,它们没有任何用处

他们所做的是打开一个文件,将其内容存储到
$s
,然后关闭它

但随后您会立即将
$s
设置为不同的值,从而丢弃以前的值,并使从文件中读取该值变得毫无意义

如果需要保留文件的原始内容,请使用
file\u get\u contents()
并确保不覆盖变量的内容

如果您不需要文件的原始内容,那么只需从代码中删除这三行即可


顺便说一句,这个错误突出了几个您应该采用的良好编码实践:首先,不要为两个不同的事情重复使用一个变量,其次总是给出您的变量(和函数)好名字。
$s
不是一个好名字;
$previousFileContents
会是一个更好的名字;它会使错误更加明显。

谢谢。我只是想看看文件是否被读取,它是否被读取。然后我将内容更改为HTTP_USER_代理,只是为了测试等待,这真的是解决方案吗?我需要脚本等到发布了大量原始脚本。如果跳过fread,因此文件根本不被读取,这不是我想要实现的。我知道文件内容可以完成这项工作,但我正在测试fread。从我的代码来看,似乎无法使用fread共享文件操作。我想测试是否可以安全地读取somfread的字节数(在共享操作上)。fread和file\u get\u内容的工作方式似乎完全不同。我无法在file\u get\u内容之后执行fflush,因为file\u get\u内容不接受filehandle。
  $fp = fopen("$n.txt", "r");
  $s = fread($fp, filesize("$n.txt") );
  fclose($fp);
$s = file_get_contents("$n.txt");