0

我有这段代码可以将行写入 new.txt(已经包含 2 行)文件,然后将此 txt 内容复制(备份)到新的 tmp.txt 文件中,但是 fread() 一直缺少 new.txt 文件中的新行复制到 tmp.txt tmp.txt 假设里面有 3 行,但是新添加的行丢失了。

$File ="new.txt";
$File2="tmp.txt";


//write into file
$handle = fopen ($File, 'a') or die("Cannot open File");    
fwrite($handle,"some string");
fclose($handle );

//copy file
$handle2= fopen ($File, 'r') or die("Cannot open File");
$content = fread($handle2, filesize($File));
fclose($handle2);   

$handle3 = fopen ($File2, 'w') or die("Cannot open File");  
fwrite($handle3,$content);
fclose($handle3 );
4

2 回答 2

0

文档中filesize

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

在该链接之后,您将获得以下附加信息,它完全回答了您的问题:

当您使用stat()lstat()或受影响函数列表(如下)中列出的任何其他函数时,PHP 会缓存这些函数返回的信息以提供更快的性能。但是,在某些情况下,您可能需要清除缓存的信息。例如,如果在一个脚本中多次检查同一个文件,并且该文件在该脚本的操作期间有被删除或更改的危险,您可以选择清除状态缓存。在这些情况下,您可以使用该clearstatcache()函数清除 PHP 缓存的有关文件的信息。

文档是你的朋友;用它!

于 2013-05-08T10:21:56.603 回答
0

命令 fread() 将要读取的内容的长度作为第二个参数,而不是文件大小,这不是一回事。无论如何,最好使用 copy() 而不是 fread() 来复制文件:

//replacement for your copy file
copy($handle1, $handle2);
于 2013-05-08T08:13:55.820 回答