文件读写顺序问题
本帖最后由 o911016 于 2013-03-13 12:45:07 编辑
<?php
function read($filename) {
$fp = fopen($filename, 'rb');
flock($fp, LOCK_SH);
$data = @fread($fp, @filesize($filename));
fclose($fp);
return $data;
}
function write($filename, $data) {
$fp = fopen($filename, 'ab');
flock($fp, LOCK_EX);
fwrite($fp, $data);
fclose($fp);
return mt_rand(1, 999);
}
$file = './wr.txt'; //原文件是空的
echo 'r1: ', read($file), '|<br/>';
echo 'w1: ', write($file, 'a'), '|<br/>';
echo 'r2: ', read($file), '|<br/>';
echo 'w2: ', write($file, 'b'), '|<br/>';
echo 'r3: ', read($file), '|<br/>';
?>
r1: |
w1: 745|
r2: |
w2: 404|
r3: |
function read($filename) {r1:
$fp = fopen($filename, 'rb');
flock($fp, LOCK_SH);
clearstatcache(); //清除文件状态缓存
$data = @fread($fp, @filesize($filename));
fclose($fp);
return $data;
}
function write($filename, $data) {
$fp = fopen($filename, 'ab');
flock($fp, LOCK_EX);
fwrite($fp, $data);
fclose($fp);
return $data;//mt_rand(1, 999);
}
$file = './wr.txt'; //原文件是空的
file_put_contents($file, ''); //清空源文件
echo 'r1: ', read($file), '
[解决办法]
<br/>';
echo 'w1: ', write($file, 'a'), '
[解决办法]
<br/>';
echo 'r2: ', read($file), '
[解决办法]
<br/>';
echo 'w2: ', write($file, 'b'), '
[解决办法]
<br/>';
echo 'r3: ', read($file), '
[解决办法]
<br/>';
readfile($file); //显示一下
[解决办法]
w2: b
[解决办法]
r3: ab
[解决办法]
ab
clearstatcache -- 清除文件状态缓存
本函数缓存特定文件名的信息,因此只在对同一个文件名进行多次操作并且需要该文件信息不被缓存时才需要调用 clearstatcache()。
受影响的函数包括 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()。