簡體   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