recherche

Maison  >  Questions et réponses  >  le corps du texte

php - À propos de fwrite et fread exploitant le même fichier

$fp = fopen("./log", "a+");
fwrite($fp,"helloworld");
rewind($fp);
var_dump( fread($fp, 10) );
fclose($fp);

Lorsque ce code est exécuté, deux helloworlds sont écrits dans le fichier. Pourquoi ?
Et comment comprendre ce passage :

Le mode mise à jour permet de lire et d'écrire le même fichier ; fflush ou une
fonction de positionnement de fichier doit être appelée entre une lecture et une écriture ou
vice versa si le mode inclut b après l'initiale. lettre, comme dans
"rb" ou "w b", qui indique un fichier binaire. Les noms de fichiers sont limités à
FILENAME_MAX caractères au maximum. Les fichiers FOPEN_MAX peuvent être ouverts en même temps.

怪我咯怪我咯2808 Il y a quelques jours1897

répondre à tous(3)je répondrai

  • 巴扎黑

    巴扎黑2017-05-16 12:04:35

    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 :

    .
    $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);

    répondre
    0
  • 大家讲道理

    大家讲道理2017-05-16 12:04:35

    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à

    répondre
    0
  • 滿天的星座

    滿天的星座2017-05-16 12:04:35

    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.

    répondre
    0
  • Annulerrépondre