在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);
因此导致它出现在文件中最初的所有其他内容之前。这很好。
当我想在文件开头包含一行代码时,问题就出现了。
具体来说我想要'!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>
我知道这将是一个很糟糕的问题,我到底能做些什么来实现这个目标?
答案 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");
?>