2013-05-16 17 views
5

Ich bin neu hier.
Wie auch immer, ich habe meine Forschung über fwrite(), aber ich konnte keine Lösung finden, also ich bitte um Hilfe. Was ich will ist z. um nach einer anderen spezifischen Zeile eine neue Textzeile hinzuzufügen. F.E. Ich habe eine .txt-Datei, in dem es:PHP fwrite() Wie füge ich eine neue Zeile nach einer bestimmten Zeile ein

//Users 

//Other stuff 

//Other stuff2 

Nun, was ich möchte ist in der Lage zu tun, um einen neuen Benutzer unter // Benutzer hinzufügen, ohne „Sonstiges“ und „Sonstiges 2“ zu berühren . So soll es in etwa so aussehen:

//Users  
Aneszej 
Test321 
Test123 

//Other stuff 

//Other stuff2 

Was ich habe, so weit:

$config = 'test.txt'; 
$file=fopen($config,"r+") or exit("Unable to open file!"); 

$date = date("F j, Y"); 
$time = date("H:i:s"); 

$username = "user"; 
$password = "pass"; 
$email = "email"; 
$newuser = $username . " " . $password . " " . $email . " " . $date . " " . $time; 

while (!feof($file)) { 
    $line=fgets($file); 
    if (strpos($line, '//Users')!==false) { 
     $newline = PHP_EOL . $newuser; 
    } 

} 

fwrite($file, $newline); 

fclose($file); 

test.txt Datei

//Users 

//Something Else 

//Something Else 2 

Aber dies nur schreibt Benutzer bis zum Ende der. TXT-Datei.

Vielen Dank für Ihre Hilfe! Es ist gelöst.

+0

können Sie versuchen, fseek – Hackerman

+0

Ich denke, wenn die Dateien Manipulation beginnt ein wenig komplex zu sein, sollten Sie eine Datenbank verwenden. Versuchen Sie SQLite, sollte Ihnen perfekt passen ... –

+0

Dies war nur ein Beispiel, ich werde es für etwas anderes verwenden. Danke für Infos. – Aneszej

Antwort

5

Ich habe Ihren Code geändert, ich denke, folgt, was Sie brauchen, und ich habe auch Kommentar, Funktion unten wird weiterhin neue Benutzer hinzufügen, können Sie Bedingung hinzufügen, die Benutzer zu überprüfen existieren.

$config = 'test.txt'; 
$file=fopen($config,"r+") or exit("Unable to open file!"); 

$date = date("F j, Y"); 
$time = date("H:i:s"); 

$username = "user"; 
$password = "pass"; 
$email = "email"; 
$newuser = $username . " " . $password . " " . $email . " " . $date . " " . $time."\r\n"; // I added new line after new user 
$insertPos=0; // variable for saving //Users position 
while (!feof($file)) { 
    $line=fgets($file); 
    if (strpos($line, '//Users')!==false) { 
     $insertPos=ftell($file); // ftell will tell the position where the pointer moved, here is the new line after //Users. 
     $newline = $newuser; 
    } else { 
     $newline.=$line; // append existing data with new data of user 
    } 
} 

fseek($file,$insertPos); // move pointer to the file position where we saved above 
fwrite($file, $newline); 

fclose($file); 
+0

Vielen Dank funktioniert richtig und so wie ich es wollte! Und danke für das Kommentieren, was jede Sache tut. – Aneszej

0

Sie schreiben den neuen Inhalt am Ende der Lesung, so dass er am Ende der Datei schreiben muss - der Cursor ist da nach dem Lesen aller Zeilen.

Entweder Sie speichern den gesamten Inhalt in PHP-Variable und überschreiben die Datei am Ende, oder Sie spulen den Cursor mit fseek zurück, wie von Robert Rozas Kommentar erwähnt. Das sollte getan werden, sobald Sie die "Etwas anderes" -Linie lesen.

0

Sie auf break müssen, nachdem Sie '// Benutzer' gefunden. Sie lesen weiter bis zum Ende der Datei.

Verwandte Themen