$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.
La fonction
.fopen
的第二个参数为模式, 有r
,w
,b
,a
等模式, 其中a
表示append
, 也就是附加的意思, 打开时不会清空文件(把EOF
指向0), 而是把文件指针指向文件末尾. 所以这个时候如果直接写的话不会覆盖原有的内容. 通过rewind
pointe le pointeur de fichier vers le point de départ. L'écriture à ce moment écrasera le contenu original. Par exemple :Il y a deux raisons : vous êtes en mode ajout et n'avez pas effacé le dernier helloworld, donc la dernière fois et l'heure actuelle sont toutes les deux là
fopen("./log", "a+"); Cette phrase signifie ouvrir un fichier en lecture-écriture de manière ajoutée. Si le fichier existe, le contenu original sera conservé et les données seront ajoutées à la fin. du dossier.
À ce moment, le pointeur du fichier $fp pointe vers la fin du fichier pour l'opération
fwrite($fp, '12345');
À ce stade, si fread($fp, 10) est imprimé directement, ce sera une chaîne vide car le pointeur de fichier $fp pointe vers la fin du fichier si la longueur est spécifiée, lisant et imprimant à l'envers. sera certainement vide.
Et si vous ajoutez rewind($fp); pour rembobiner la position du pointeur de fichier, vous constaterez que le pointeur $fp pointe vers le début du fichier, et l'impression fread($fp, 10) en résultera.
Mais lorsque vous ouvrez votre journal, il est ajouté à chaque fois à la fin du fichier.