php - 关于fwrite和fread操作同一个文件
怪我咯
怪我咯 2017-05-16 12:02:35
0
3
1734
$fp = fopen("./log", "a+"); fwrite($fp,"helloworld"); rewind($fp); var_dump( fread($fp, 10) ); fclose($fp);

执行这段代码,文件里被写入了两个helloworld,这是为什么?
还有就是这段话怎么理解:

Update mode permits reading and writing the same file; fflush or a
file-positioning function must be called between a read and a write or
vice versa. If the mode includes b after the initial letter, as in
"rb" or "w+b", that indicates a binary file. Filenames are limited to
FILENAME_MAX characters. At most FOPEN_MAX files may be open at once.

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답 (3)
巴扎黑

fopen的第二个参数为模式, 有r,w,b,a等模式, 其中a表示append, 也就是附加的意思, 打开时不会清空文件(把EOF指向0), 而是把文件指针指向文件末尾. 所以这个时候如果直接写的话不会覆盖原有的内容. 通过rewind函数将文件指针指向起点, 这个时候写会覆盖原有内容. 比如:

$fp = open('./log.txt', 'w+'); fwrite($fp, '12345'); fclose($fp); // 此时文件的内容一定是'12345', 无论在之前是什么 $fp = open('./log.txt', 'a+'); fwrite($fp, '67890'); // 此时文件内容为'1234567890' rewind($fp); fwrite($fp, 'abcde'); // 此时文件内容为'abcde67890' fclose($fp);
    大家讲道理

    有两个的原因是你是append模式,并没有清空上一次的helloworld,所以上一次和当前次的都在

      滿天的星座

      fopen("./log", "a+");这句话是说以附加的方式打开可读写文件,如果说文件存在,原来的内容会被保留,并且数据是追加到文件末尾的。

      这时候$fp文件指针指向文件末尾来操作
      fwrite($fp, '12345');

      这时候直接打印fread($fp, 10)会为空字符串,是由于$fp文件指针指向文件末尾,指定了长度向后读取打印肯定为空。
      而如果你加上rewind($fp);倒回文件指针的位置,这时候你会发现,$fp指针指向了文件开头,打印fread($fp, 10)会有结果。

      但是你打开你的log,每次都还是追加在文件末尾写入了进去。

        최신 다운로드
        더>
        웹 효과
        웹사이트 소스 코드
        웹사이트 자료
        프론트엔드 템플릿
        회사 소개 부인 성명 Sitemap
        PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!