2013-05-16 38 views
5

Jestem tutaj nowy.
W każdym razie, zrobiłem moje badania na fwrite(), ale nie mogłem znaleźć rozwiązania, więc proszę o pomoc. To, czego chcę, to f.e. aby dodać nową linię tekstu po jakiejś innej linii. F.e. Mam plik .txt, w którym znajduje się:PHP fwrite() jak wstawić nową linię po określonej linii

//Users 

//Other stuff 

//Other stuff2 

Teraz to, co chciałbym zrobić, to móc dodać nowego użytkownika poniżej // użytkowników bez dotykania „inne rzeczy” i „2” inne rzeczy . Tak powinno to wyglądać mniej więcej tak:

//Users  
Aneszej 
Test321 
Test123 

//Other stuff 

//Other stuff2 

Co mam tak daleko:

$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 plik

//Users 

//Something Else 

//Something Else 2 

Ale to tylko pisze użytkowników do końca. plik txt.

Dziękuję wszystkim za pomoc! Jest rozwiązany.

+0

Można spróbować fseek – Hackerman

+0

myślę gdy manipulacja plik zaczyna być trochę kompleks bitowej, należy użyć bazy danych. Wypróbuj SQLite, powinien idealnie pasować ... –

+0

To był tylko przykład, użyję go do czegoś innego. Dzięki za informację. – Aneszej

Odpowiedz

5

Zmodyfikowałem twój kod, myślę, że poniżej jest to, czego potrzebujesz, a także dodałem komentarz, funkcja poniżej będzie dodawać nowego użytkownika, możesz dodać warunek, który sprawdza, czy użytkownik istnieje.

$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

Dziękuję bardzo działa poprawnie i dokładnie tak, jak chciałem! I dzięki za komentowanie tego, co robi każda rzecz. – Aneszej

0

Pisać nową zawartość na końcu czytania, więc musi ona pisać na końcu pliku - kursor jest po przeczytaniu wszystkich linii.

Albo zapiszesz całą zawartość w zmiennej php i nadpiszesz plik na końcu, albo zwiniesz kursora fseek, o czym wspomniał Robert Rozas. Powinno to nastąpić, gdy tylko przeczytasz "Coś innego" - linię.

0

Trzeba break Po znalezieniu "// użytkowników. Ciągle czytasz do końca pliku.