在下面的代码中我......
打开一个文本文件,给它写四个字符,然后再关闭它,
重新打开它,阅读内容,并使用filesize报告文件大小。 (它应该是4,
操纵这些内容并添加另外四个字符。然后我将新字符串写入文本文件并再次关闭它,
再次使用filesize报告文件的大小。
令我惊讶的是,即使文件的实际大小为8,它给出的答案仍然是4!检查文件的内容证明写入有效,内容的长度为8。
发生了什么事?
顺便说一句,我必须使用fread和fwrite而不是file_get_contents和file_put_contents。至少我想我做到了。这个小程序是使用" flock"的一个垫脚石。所以我可以读取文件的内容并重写它,同时确保没有其他进程在其间使用该文件。并且AFAIK flock不能使用file_get_contents和file_put_contents。
请帮忙!
<?php
$filename = "blahdeeblah.txt";
// Write 4 characters
$fp = fopen($filename, "w");
fwrite($fp, "1234");
fclose($fp);
// read those characters, manipulate them, and write them back (also increasing filesize).
$fp = fopen($filename, "r+");
$size = filesize($filename);
echo "size before is: " . $size . "<br>";
$t = fread($fp, $size);
$t = $t[3] . $t[2] . $t[1] . $t[0] . "5678";
rewind($fp);
fwrite($fp, $t);
fclose($fp);
// "filesize" returns the same number as before even though the file is larger now.
$size = filesize($filename);
echo "size after is: " . $size . " ";
?>
答案 0 :(得分:3)
来自http://php.net/manual/en/function.filesize.php
注意:此功能的结果已缓存。有关详细信息,请参阅clearstatcache()。
答案 1 :(得分:0)
请注意,缓存的值仅在当前脚本中使用。当您再次运行脚本时,filesize()会读取新的(正确)文件大小。 示例:
$filename='blahdeeblah.txt';
$fp=fopen($filename, 'a');
$size=@filesize($filename);
echo 'Proper size: '.$size.'<br>';
fwrite($fp, '1234');
fclose($fp);
$size=@filesize($filename);
echo 'Wrong size: '.$size;
答案 2 :(得分:0)
通过fopen()函数打开文件时,您可以随时使用fstat()函数获取适当的大小:
$fstat=fstat($fp);
echo 'Size: '.$fstat['size'];
示例:
$filename='blahdeeblah.txt';
$fp=fopen($filename, 'a');
$size=@filesize($filename);
echo 'Proper size (obtained by filesize): '.$size.'<br>';
$fstat=fstat($fp);
echo 'Proper size (obtained by fstat): '.$fstat['size'].'<br><br>';
fwrite($fp, '1234');
echo 'Writing 4 bytes...<br><br>';
$fstat=fstat($fp);
echo 'Proper size (obtained by fstat): '.$fstat['size'].'<br>';
fclose($fp);
$size=@filesize($filename);
echo 'Wrong size (obtained by filesize): '.$size;