2017-11-03 4 views
1

Imagine ich eine TXT-Datei (some.txt) mit den folgenden Inhalt haben:PHP: Einfügen von Inhalten zwischen bestimmten Zeile einer Datei?

data of first line 
data of next line 
#start-marker 

data of next line 
#end-marker 
data of next line 

Und ich will ein paar Zeilen nur nach # Start-Marker

Zeit schreiben, ich habe dies:

$fp = fopen('some.txt','r+'); 
$insertPos=0; 
while (!feof($fp)) { 
    $line=fgets($fp); 
    if (strpos($line, '#start-marker')!==false) { 
     $insertPos=ftell($fp); 
} 
fseek($fp,$insertPos); 
fwrite($fp,'Data to be written'); 
fclose($fp); 

Aber das Problem ist:

data of first line 
data of next line 
#start-marker 
Data to be written 

Alle Linien sind di sappear nach neuer eingefügter Zeile.

Wie geht das?

Erwarteter Ausgang:

data of first line 
data of next line 
#start-marker 

Data to be written 
data of next line 
#end-marker 
data of next line 
+0

Siehe https://stackoverflow.com/a/6472446/689579 – Sean

Antwort

0
$myfile = file_get_contents('some.txt'); 
$insert = '#start-marker blah blah blah new data here'; 
$myfile = str_replace('#start-marker', $insert, $myfile, 1); 
file_put_contents('some.txt', $myfile); 
0

Ich glaube, Sie für Anfügen suchen einzureichen. Versuchen Wechsel von 'r +' in den Modus Hinzufügen a+, um Ihren Code:

$fp = fopen('some.txt','a+'); 
$insertPos=0; 
while (!feof($fp)) { 
    $line=fgets($fp); 
    if (strpos($line, '#start-marker')!==false) { 
     $insertPos=ftell($fp); 
} 
fseek($fp,$insertPos); 
fwrite($fp,'Data to be written'); 
fclose($fp); 

Referenz: Modus parameter- http://php.net/manual/en/function.fopen.php

+0

gleiche Leistung, jetzt funktioniert –

+0

immer noch die Daten überschreiben? –

+0

edit: versuchen, ändern Sie die R + in a + –

Verwandte Themen