问题是这样的,这个是用来计数的,但是fopen选择用a+的方式打开以后,如果不加注释的那一行代码,直接fwrite写入的话,新的$num数据总是写在原有数据的结尾处。所以就是想问一下,fgets这个函数是不是在读取完数据后,指针也会指到读取数据的结尾处呢?
然后再想问一下,如果加上注释掉的那一行代码之后,就有两次fopen了,那么前面的那一次不用fclose吗?
$file="record.txt";
...
$fp=fopen($file,"a+");
$num=fgets($fp,"1024");
$num=$num+1;
//$fp=fopen($file,"w+");//之所以注释掉这一行是因为加入这一行代码之后,写入的数据就是正确的了。
fwrite($fp,$num);
fclose($fp);

解决方案 »

  1.   

    a+ 方式就是追加方式,写入的内容在原来内容的后边
    w 方式是写方式,总是先清空原有的内容一般可不要 fclose($fp);
    除非你想早一点把控制权还给操作系统
      

  2.   

    $file="record.txt";
    ...
    $fp=fopen($file,"r+");//文件存在的情况下r+,配合下面的rewind,可以抹掉前面写入的数据,如果不存在,用"w+"方式打开文件好了
    $num=fgets($fp,"1024");
    $num=$num+1;
    //$fp=fopen($file,"w+");//之所以注释掉这一行是因为加入这一行代码之后,写入的数据就是正确的了。
    rewind($fp);
    fwrite($fp,$num);
    fclose($fp);
      

  3.   

    r+的话就先fseek,a+的话就不需要了。
      

  4.   

    r+不需要fseek需要重新定位指针的原因是你先执行了fgets