提问人:ray 提问时间:6/11/2015 最后编辑:Jahidray 更新时间:9/22/2018 访问量:7686
a+ 和 fopen() 的模式
a+ and a mode with fopen()
问:
根据手册,如果在功能中选择模式,文件指针将放在末尾。a/a+
fopen()
但是为什么我使用 the 和 still 返回得到 0 ?如果文件指针位于末尾。ftell()
feof()
false
例如:
$handle=fopen("./file.txt","w");
fwrite($handle,1234567890);
fclose($handle);
$handle=fopen("./file.txt","a+");
echo getc($handle);
fclose($handle);
我得到了 1,但如果文件指针放在最后,我不应该得到 0 吗?
答:
1赞
Lightness Races in Orbit
6/11/2015
#1
就在文档中,靠近顶部:
ftell()
为仅追加流提供未定义的结果(以“a”标志打开)。
评论
0赞
ray
6/11/2015
使用 ftell() 可能是一个坏主意。但是如果我选择 a+ 模式,为什么 fgetc() 仍然返回文件的第一个字符?A+ 模式将文件指针放在最后
0赞
Lightness Races in Orbit
6/11/2015
@ray:内部读取游标和写入游标之间可能存在差异。我猜PHP只是试图让它们保持同步,但并没有特意去检测它们何时开始生活。在追加模式下直接从 POSIX 打开文件时,写入游标位于末尾,而读取游标位于开头。
3赞
Daniel W.
6/11/2015
#2
a+
意思是,从头开始读,写到最后。
这就是为什么你从流中得到一个焦炭。
在内部,您有两个流,并且 .STDIN
STDOUT
评论
0赞
ray
6/11/2015
但文件指针放在最后。这不会影响 fread()、fgets() 吗?
0赞
Lightness Races in Orbit
6/11/2015
@ray:有不止一个文件指针,不管PHP的抽象让你怎么想。
0赞
Daniel W.
9/3/2019
应该记住,实际上没有用例可以同时读取和写入文件,而无法分离这些步骤,无论如何这更安全。
2赞
Rashy
1/12/2017
#3
"a"
- 仅写入。打开并写入文件末尾,或者创建一个新文件(如果该文件不存在)。
"a+"
- 读/写。通过写入文件末尾来保留文件内容。
评论