为了账号安全,请及时绑定邮箱和手机立即绑定

PHP:可以附加到文件,但不能正确回显文件内容

PHP:可以附加到文件,但不能正确回显文件内容

PHP
万千封印 2022-09-17 15:27:54
我正在尝试创建一个本地txt文件,在里面写一些文本,关闭它,读取并返回其内容,然后附加更多的文本,最后,再次阅读它并回显内容。<?php    $file = "test.txt";    $fileHandler = fopen($file, "w") or die("Could not write to file!");    fwrite($fileHandler, "This is my first message <br>");    fwrite($fileHandler, "This is my second message <br>");    fclose($fileHandler);    $fileHandler = fopen($file, "r") or die("Could not read file!");;    $contents = fread($fileHandler, filesize($file));    fclose($fileHandler);    echo $contents;    echo "<br>";    echo "FileSize after first write: " . filesize($file);    echo "<br>";    echo "<hr>";    $fileHandler = fopen($file, "a") or die("Could not append to file!");    fwrite($fileHandler, "This is my third message <br>");    fclose($fileHandler);    $fileHandler = fopen($file, "r") or die("Could not read file!");;    $contents = fread($fileHandler, filesize($file));    fclose($fileHandler);    echo $contents;    echo "<br>";    echo "FileSize after append: " . filesize($file);    echo "<br>";一切都按预期工作,所有消息都写入文件,但问题出在回声上。我期待看到这样的东西:This is my test messageThis is my second test messageFileSize after first write: 63-----------------------------------------------------------------This is my test messageThis is my second test messageThis is my third test messageFileSize after append: 97但我得到以下回声:This is my test messageThis is my second test messageFileSize after first write: 63--------------------------------------------------------------------This is my test messageThis is my second test messageFileSize after append: 63我不知道这里的问题是什么...任何帮助将不胜感激!!!!
查看完整描述

3 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

文件大小() 的文档页面中

注意:此函数的结果将被缓存。有关更多详细信息,请参阅清除统计缓存()。

因此,您必须在编写新内容后清除缓存:

 $fileHandler = fopen($file, "a") or die("Could not append to file!");

 fwrite($fileHandler, "This is my third message <br>");

 fclose($fileHandler);

 clearstatcache();


查看完整回答
反对 回复 2022-09-17
?
Helenr

TA贡献1780条经验 获得超3个赞

首先,用于以读+写模式打开文件,这意味着它与您的问题无关。然后,正如在其他 anwers 中已经提到的,该函数被缓存,您需要使用才能看到更改。a+filesize()clearstatcache()


作为 + + 的替代方法,您可以使用组合了 3 个函数的函数。fopen()fwrite()fclose()file_put_contents()


例:


    $file = __DIR__.'/test.txt';


    // First we call the function without second parameter

    file_put_contents($file, 'This is my first message'.PHP_EOL);

    // Following calls use the second parameter with FILE_APPEND`

    file_put_contents($file, 'This is my second message'.PHP_EOL, FILE_APPEND);


    echo file_get_contents($file);

    echo PHP_EOL.'FileSize after first write: ' . filesize($file) . ' bytes' . PHP_EOL;

    clearstatcache();

    echo '-----------------------'.PHP_EOL;


    file_put_contents($file, 'This is my third message'.PHP_EOL, FILE_APPEND);

    echo file_get_contents($file);

    echo PHP_EOL.'FileSize after append: ' . filesize($file) . ' bytes' . PHP_EOL;

输出:


This is my first message

This is my second message


FileSize after first write: 51 bytes

-----------------------

This is my first message

This is my second message

This is my third message


FileSize after append: 76 bytes

`


查看完整回答
反对 回复 2022-09-17
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

每当您写入或读取文件时,PHP 都会缓存更改。所以你必须清除缓存,你可以使用这个函数来清除PHP缓存的关于文件的信息。clearstatcache()

在这里阅读更多内容,请 https://www.php.net/manual/en/function.clearstatcache


查看完整回答
反对 回复 2022-09-17
  • 3 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信