$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.
fopen
的第二个参数为模式, 有r
,w
,b
,a
等模式, 其中a
表示append
, 也就是附加的意思, 打开时不会清空文件(把EOF
指向0), 而是把文件指针指向文件末尾. 所以这个时候如果直接写的话不会覆盖原有的内容. 通过rewind
함수는 파일 포인터를 시작점으로 가리킵니다. 이때 쓰면 원래 내용을 덮어쓰게 됩니다. 으아악두 가지 이유가 있습니다. 추가 모드에 있고 마지막 helloworld를 삭제하지 않았으므로 마지막 시간과 현재 시간이 모두 거기에 있습니다
fopen("./log", "a+"); 이 문장은 읽기 및 쓰기 가능한 파일을 추가 방식으로 여는 것을 의미합니다. 파일이 존재하는 경우 원본 내용은 유지되고 데이터는 끝에 추가됩니다. 파일의.
이때, $fp 파일 포인터는 파일의 끝을 가리키며 동작합니다
fwrite($fp, '12345');
이때, fread($fp, 10) 을 직접 출력하면 빈 문자열이 됩니다. 이는 $fp 파일 포인터가 파일의 끝을 가리키기 때문입니다. 길이를 지정하면 거꾸로 읽어서 출력하게 됩니다. 확실히 비어있을 것입니다.
그리고 파일 포인터의 위치를 되감기 위해 rewind($fp);를 추가하면 $fp 포인터가 파일의 시작 부분을 가리키고 fread($fp, 10)을 인쇄하면 결과가 생성됩니다.
하지만 로그를 열면 매번 파일 끝에 추가됩니다.