我这段代码:
$file = fopen($path, 'r+');
flock($file, LOCK_EX);
// reading the file into an array and doing some stuff to it
for ($i=0; $i<count($array); $i++)
{
fwrite($file, $array[$i]);
}
flock($file, LOCK_UN);
fclose($file);
基本上我想要做的是:打开文件&gt;锁定它&gt;阅读它&gt;做一些事情&gt; 清除文件&gt;写入文件&gt;解锁它&gt;关闭它。
问题在于清算部分。我知道我可以用fopen($file, 'w+')
做到这一点但是阅读会有问题。也许我可以某种方式改变mode
?
任何帮助将不胜感激,保罗
答案 0 :(得分:5)
如果使用fseek
将指针设置为0,则可以像这样运行ftruncate
:
// reading the file into an array and doing some stuff to it
//1
fseek($handle,0); //Set the pointer to the first byte
//2
ftruncate($handle,filesize("yourfile.ext")); //from the first byte to the last truncate
//3 - File should be empty and still in writing mode.
for ($i=0; $i<count($array); $i++)
{
fwrite($file, $array[$i]);
}
让ftruncate
注意这些问题,请关注第二个参数:
如果尺寸小于文件,则文件会被截断为该尺寸。
答案 1 :(得分:0)
fopen($file, 'r+')
包括阅读和写作。前进,繁荣。
r +说明: 开放阅读和写作;将文件指针放在文件的开头。
w +描述: 开放阅读和写作;将文件指针放在文件的开头,并将文件截断为零长度。如果该文件不存在,请尝试创建它。
答案 2 :(得分:0)
你可以有单独的锁空文件并调用flock($ file,LOCK_EX);在该文件上打开另一个文件进行写作。