>  Q&A  >  본문

php - 关于fwrite和fread操作同一个文件

$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.

怪我咯怪我咯2685일 전1775

모든 응답(3)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-05-16 12:04:35

    fopen的第二个参数为模式, 有r, w, b, a等模式, 其中a表示append, 也就是附加的意思, 打开时不会清空文件(把EOF指向0), 而是把文件指针指向文件末尾. 所以这个时候如果直接写的话不会覆盖原有的内容. 通过rewind 함수는 파일 포인터를 시작점으로 가리킵니다. 이때 쓰면 원래 내용을 덮어쓰게 됩니다. 으아악

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-05-16 12:04:35

    두 가지 이유가 있습니다. 추가 모드에 있고 마지막 helloworld를 삭제하지 않았으므로 마지막 시간과 현재 시간이 모두 거기에 있습니다

    회신하다
    0
  • 滿天的星座

    滿天的星座2017-05-16 12:04:35

    fopen("./log", "a+"); 이 문장은 읽기 및 쓰기 가능한 파일을 추가 방식으로 여는 것을 의미합니다. 파일이 존재하는 경우 원본 내용은 유지되고 데이터는 끝에 추가됩니다. 파일의.

    이때, $fp 파일 포인터는 파일의 끝을 가리키며 동작합니다
    fwrite($fp, '12345');

    이때, fread($fp, 10) 을 직접 출력하면 빈 문자열이 됩니다. 이는 $fp 파일 포인터가 파일의 끝을 가리키기 때문입니다. 길이를 지정하면 거꾸로 읽어서 출력하게 됩니다. 확실히 비어있을 것입니다.
    그리고 파일 포인터의 위치를 ​​되감기 위해 rewind($fp);를 추가하면 $fp 포인터가 파일의 시작 부분을 가리키고 fread($fp, 10)을 인쇄하면 결과가 생성됩니다.

    하지만 로그를 열면 매번 파일 끝에 추가됩니다.

    회신하다
    0
  • 취소회신하다