Rumah > Soal Jawab > teks badan
$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.
巴扎黑2017-05-16 12:04:35
Fungsi
fopen
的第二个参数为模式, 有r
, w
, b
, a
等模式, 其中a
表示append
, 也就是附加的意思, 打开时不会清空文件(把EOF
指向0), 而是把文件指针指向文件末尾. 所以这个时候如果直接写的话不会覆盖原有的内容. 通过rewind
menghalakan penuding fail ke titik permulaan Penulisan pada masa ini akan menimpa kandungan asal Contohnya:
$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);
大家讲道理2017-05-16 12:04:35
Terdapat dua sebab: anda berada dalam mod tambah dan belum mengosongkan helloworld terakhir, jadi kali terakhir dan masa semasa kedua-duanya ada
滿天的星座2017-05-16 12:04:35
fopen("./log", "a+"); Ayat ini bermaksud membuka fail baca-tulis dengan cara yang dilampirkan Jika fail itu wujud, kandungan asal akan dikekalkan dan data akan ditambahkan ke penghujung daripada fail tersebut.
Pada masa ini, penuding fail $fp menghala ke penghujung fail untuk operasi
fwrite($fp, '12345');
Pada masa ini, jika fread($fp, 10) dicetak secara langsung, ia akan menjadi rentetan kosong Ini kerana penuding fail $fp menghala ke hujung fail Jika panjangnya dinyatakan, membaca dan mencetak ke belakang pasti akan kosong.
Dan jika anda menambah rewind($fp); untuk memundurkan kedudukan penuding fail, anda akan mendapati bahawa penuding $fp menghala ke permulaan fail, dan mencetak fread($fp, 10) akan terhasil.
Tetapi apabila anda membuka log anda, ia dilampirkan pada penghujung fail setiap kali.