中途改变fopen()模式?

时间:2011-01-18 20:17:42

标签: php file fopen

我这段代码:

$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

任何帮助将不胜感激,保罗

3 个答案:

答案 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 +描述: 开放阅读和写作;将文件指针放在文件的开头,并将文件截断为零长度。如果该文件不存在,请尝试创建它。

来源:http://php.net/manual/en/function.fopen.php

答案 2 :(得分:0)

你可以有单独的锁空文件并调用flock($ file,LOCK_EX);在该文件上打开另一个文件进行写作。