国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

執(zhí)行這段代碼,文件里被寫入了兩個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.

怪我咯
怪我咯

走同樣的路,發(fā)現(xiàn)不同的人生

Antworte allen(3)
巴扎黑

fopen的第二個參數(shù)為模式, 有r, w, b, a等模式, 其中a表示append, 也就是附加的意思, 打開時不會清空文件(把EOF指向0), 而是把文件指針指向文件末尾. 所以這個時候如果直接寫的話不會覆蓋原有的內(nèi)容. 通過rewind函數(shù)將文件指針指向起點(diǎn), 這個時候?qū)憰采w原有內(nèi)容. 比如:

$fp = open('./log.txt', 'w+');
fwrite($fp, '12345');
fclose($fp); // 此時文件的內(nèi)容一定是'12345', 無論在之前是什么
$fp = open('./log.txt', 'a+');
fwrite($fp, '67890');  // 此時文件內(nèi)容為'1234567890'
rewind($fp);
fwrite($fp, 'abcde'); // 此時文件內(nèi)容為'abcde67890'
fclose($fp);
大家講道理

有兩個的原因是你是append模式,并沒有清空上一次的helloworld,所以上一次和當(dāng)前次的都在

滿天的星座

fopen("./log", "a+");這句話是說以附加的方式打開可讀寫文件,如果說文件存在,原來的內(nèi)容會被保留,并且數(shù)據(jù)是追加到文件末尾的。

這時候$fp文件指針指向文件末尾來操作
fwrite($fp, '12345');

這時候直接打印fread($fp, 10)會為空字符串,是由于$fp文件指針指向文件末尾,指定了長度向后讀取打印肯定為空。
而如果你加上rewind($fp);倒回文件指針的位置,這時候你會發(fā)現(xiàn),$fp指針指向了文件開頭,打印fread($fp, 10)會有結(jié)果。

但是你打開你的log,每次都還是追加在文件末尾寫入了進(jìn)去。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage