我的需要是写一段脚本,制造出来一个700kb的文件,代码如下:
<?php
$handle = fopen('./split.log', 'a+');
$result = 0;
while( $result <= 700*1024) {
for($number = 0; $number <= 10; $number++) {
fwrite($handle, "{$number}\t");
}
fwrite($handle, "\n");
$result = filesize('./split.log');
echo $result,"\n";
sleep(2);
}
fclose($handle);
?>
问题是,发现产生了死循环,while条件使用为真!运行结果如下:
根本原因的是while循环中的filesize 函数返回的始终是24?不明白是什么原因?
PHPz2017-04-10 16:10:37
PHP 文档说:
Note: 此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。
PS: 这行为比 Erlang 更神奇呢……
PHP中文网2017-04-10 16:10:37
PHP 将缓存下面这些函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。
stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() 和 fileperms()。