fwrite从头开始写而不删除

时间:2011-07-13 15:15:49

标签: php fwrite

我正在使用PHP和fwrite代码,但我希望每个写入位置从文件的开头开始,而不删除它的内容。我正在使用此代码,但它正在写入文件的末尾。

$fr = fopen("aaaa.txt", "a");
fwrite($fr, "text");
fclose($fr);

8 个答案:

答案 0 :(得分:2)

所以你想写一个文件的开头,把所有当前内容留在新数据之后?您必须首先获取其现有内容,然后在覆盖新数据后将其重新附加到文件中。

$file = 'aaaa.txt';
$oldContents = file_get_contents($file);
$fr = fopen($file, 'w');
fwrite($fr, "text");
fwrite($fr, $oldContents);
fclose($fr);

如果您想避免将原始文件的内容加载到PHP脚本的内存中,您可以尝试首先写入临时文件,使用循环缓冲区或系统调用将原始文件的内容附加到临时文件,然后删除原始文件并重命名临时文件。

答案 1 :(得分:1)

来自PHP网站:

  

注意:

     

如果您已在附加(“a”或“a +”)模式下打开文件,那么您有任何数据   无论文件如何,都将始终追加写入文件   位置

我建议像这样(来自php.net网站):

$handle = fopen('output.txt', 'r+');

fwrite($handle, 'Really long sentence.');
rewind($handle);
fwrite($handle, 'Foo');
rewind($handle);

echo fread($handle, filesize('output.txt'));

fclose($handle);

答案 2 :(得分:0)

$file = 'aaaa.txt';
$tmp = file_get_contents($file);
$tmp = 'text'.$tmp;
$tmp = file_put_contents($file, $tmp);
echo ($tmp != false)? 'OK': '!OK';

答案 3 :(得分:0)

使用此代码:

$file = 'aaaa.txt';
$oldContents = file_get_contents($file);
$fr = fopen($file, 'w');
$newmsg="text".$oldContents;
fwrite($fr, $oldContents);
fclose($fr);

答案 4 :(得分:0)

使用file_get_contents预取旧内容并在编写新内容后附加它是一种方法。 但是,如果文件是动态编写的,并且沿着你需要回到文件开头并添加一些文本的方式,那么这里是如何:

$handle = fopen($FILE_PATH, 'w+');
fwrite($handle, "I am writing to a new empty file 
                and now I need to add Hello World to the beginning");

预先添加Hello World,请执行以下操作:

$oldText = '';
fseek($handle, 0);
while (!feof($handle)) {
   $oldText .= fgets($handle);
}
fseek($handle, 0);
fwrite($handle, "Hello World! ");
fwrite($handle, $oldText);

fclose($handle);

结果将是:

  

Hello World!我正在写一个新的空文件                       现在我需要将Hello World添加到开头

提醒并且像Fabrizio已经注意到:

  

如果您已在附加(“a”或“a +”)模式下打开文件,那么您有任何数据   无论文件如何,都将始终追加写入文件   位置

答案 5 :(得分:0)

  1. 以w +模式而不是+模式打开文件。
  2. 获取要添加的文本长度($ chunkLength)
  3. 将文件光标设置为文件的开头
  4. 从文件中读取$ chunkLength个字节
  5. 将光标返回$ chunkLength * $ i;
  6. 写$ prepend
  7. 设置$ prepend第4步中的值
  8. 执行这些步骤,而EOF

    $handler = fopen('1.txt', 'w+');//1
    rewind($handler);//3
    $prepend = "I would like to add this text to the beginning of this file";
    $chunkLength = strlen($prepend);//2
    $i = 0;
    do{
        $readData = fread($handler, $chunkLength);//4
        fseek($handler, $i * $chunkLength);//5
        fwrite($handler, $prepend);//6
    
        $prepend = $readData;//7
        $i++;
    }while ($readData);//8
    
    fclose($handler);
    

答案 6 :(得分:0)

首先以c+模式打开文件,如果不存在则打开文件或创建新文件并将指针指向文件开头。要获取旧内容,请使用 file_get_contents 并检查文件是否存在。

$fh = fopen($file_path, 'c+'); 

if (file_exists($file_path)) {   
    $oldContents = file_get_contents($file_path);  
    fwrite($fh,"New Content" );  
    fwrite($fh, $oldContents);   
} else {   
    fwrite($fh,"New Content");   
}   

fclose($fh);

答案 7 :(得分:-2)

使用fseek()在文件中设置您的位置。

$fr = fopen("aaaa.txt", "r+");
fseek($fr, 0); // this line will set the position to the beginning of the file
fwrite($fr, "text");
fclose($fr);