繁体   English   中英

如何将行插入到特定行号的文件中?

[英]How do you insert a line into a file at a specific line number?

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

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

'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变量中的内容写入文件,然后再写入文件中原来的数据。

从而使它显示在文件中的所有其他内容之前。 这很好。


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

具体来说,我希望“!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>

我知道这将是一个不好的问题,我该怎么做才能做到这一点?

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

$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);

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

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

例如,您可以将文件视为数据文件,在其中仅添加不带标题的行,然后以html格式提供数据时,首先输出标题,然后以相反的顺序输出行。

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

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

当您想插入新内容时,可以使用file()file()加载到数组中,然后使用array_splice()将内容插入数组的索引1(文件的第二行array_splice()

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

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

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

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

我最终还是这样

<?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");
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM