如何在特定行号的文件中插入一行?

时间:2018-01-31 09:46:18

标签: php html

在PHP中,有一个用于读/写的fopen(' r +')。 (从文件开头开始) 还有fopen(' a +')用于读/写。 (附加到文件末尾)

我制作了一个简单的$ _POST ['数据']表单,将表单中写入的内容写入文件。我的问题是,如果我写一些东西,例如。

'Red ' 
'Green ' 
'Blue '

如果我追加这些数据,它将按我写入的顺序显示在文件中。

但是,我需要写入文件的开头,以便它的顺序相反。

'Blue '
'Green '
'Red '

$ file_data ='在文件中写什么';

$ file_data。= file_get_contents(' testz.php'); file_put_contents(' testz.php',$ file_data);

  1. 这会将$ file_data变量中的任何内容写入文件,然后再写入文件中最初的数据。
  2. 因此导致它出现在文件中最初的所有其他内容之前。这很好。

    当我想在文件开头包含一行代码时,问题就出现了。

      

    具体来说我想要'!DOCTYPE html html head'总是在   文件顶部。我当然可以把它放在文件数据中:   file_put_contents(' testz.php',$ headerinformation。$ file_data);

    但问题就是每次我提交POST时,都会重复

    <!DOCTYPE html><html><head>Blue
    <!DOCTYPE html><html><head>Green
    <!DOCTYPE html><html><head>Red
    

    我想要的是

    <!DOCTYPE html><html><head>
    Blue
    Green
    Red
    

    那么,我可以继续通过POST表单向文件中写入更多信息,而无需替换第一行。

    <!DOCTYPE html><html><head>
    

    我知道这将是一个很糟糕的问题,我到底能做些什么来实现这个目标?

4 个答案:

答案 0 :(得分:1)

为什么不检查文件中是否包含某些数据,例如:

$data_to_write = file_get_contents('testz.php'); 
$header_data = '<!DOCTYPE html><html><head>';
$file_data .= (empty($data_to_write))?$header_data.$data_to_write:$data_to_write;
file_put_contents('testz.php', $file_data);

答案 1 :(得分:1)

您只能添加到文件的末尾。您可以在其中间书写,但只能写入现有数据。因此,为了添加文本行总是作为第二行,您应该加载数据,在正确的位置添加行,然后再次写入文件。

但我认为你所做的是一件非常奇怪的事情,而且很可能是可以避免的。您正在编写一个HTML文件,这使我认为您将在某个时刻显示它,在这种情况下,您应该将数据处理和表示分开。

例如,您可以将文件视为一个数据文件,您只需在其中添加没有标题的行,然后当您想要将数据作为html提供时,首先输出标题然后按相反的顺序输出行。

答案 2 :(得分:1)

首先,您应该在创建文件时写下第一行,例如:

$first_line = "<!DOCTYPE html><html><head>" . PHP_EOL;
file_put_contents("somefile.txt", $first_line);

如果要插入新内容,可以将文件加载到file()的数组中,并使用{{3将内容插入数组的索引1(文件中的第二行) }}:

$lines = file("somefile.txt");
array_splice($lines, 1, 0, "new content"); 

使用array_splice()将数组元素连接到字符串,最后写入文件:

$file_content = implode(PHP_EOL, $lines);
file_put_contents("somefile.txt", $file_content);

请注意,此方法在处理大型文件时会导致内存问题。

答案 3 :(得分:0)

我最终这样做了,

<?php
$f=fopen('WriteFile.php', 'r+');
$W='<!DOCTYPE html>'.file_get_contents('WriteFile.php');
$S='New Data';
fwrite($f, "$W");
fgets($f);
fseek($f,15);
fwrite($f, "$S");
?>