2013-05-16 5 views
5

Я новичок здесь.
Во всяком случае, я сделал свое исследование по fwrite(), но я не смог найти решение, поэтому я прошу помощи. Что я хочу - f.e. для добавления новой строки текста после некоторой другой конкретной строки. F.e. У меня есть файл .txt, в котором есть:PHP fwrite() как вставить новую строку после определенной строки

//Users 

//Other stuff 

//Other stuff2 

Теперь то, что я хотел бы сделать, это быть в состоянии добавить нового пользователя ниже // Пользователи, не касаясь «Other Stuff» и «другие вещи 2» , Так оно и должно выглядеть примерно так:

//Users  
Aneszej 
Test321 
Test123 

//Other stuff 

//Other stuff2 

То, что я до сих пор:

$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

//Users 

//Something Else 

//Something Else 2 

Но это только пишет пользователей к концу. txt-файл.

Большое спасибо за вашу помощь! Он решен.

+0

Вы можете попробовать FSEEK – Hackerman

+0

я думаю, что, когда ваша манипуляция файла начинает быть немного немного сложным, вы должны использовать базу данных. Попробуйте SQLite, вам вполне подходит ... –

+0

Это был просто пример, я собираюсь использовать его для чего-то другого. Спасибо за информацию. – Aneszej

ответ

5

Я изменил ваш код, я думаю, что это то, что вам нужно, и я также добавил комментарий, функция ниже будет продолжать добавлять нового пользователя, вы можете добавить условие, чтобы проверить, существует ли пользователь.

$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

Спасибо, много работает правильно и так, как я хотел! И спасибо за комментарий, что каждая вещь делает. – Aneszej

0

Вы пишете новый контент в конце чтения, поэтому он должен писать в конце файла - курсор находится после прочтения всех строк.

Либо вы храните все содержимое в php-переменной, либо перезаписываете файл в конце, либо перематываете курсор с помощью fseek, как указано в комментарии Роберта Розаса. Это нужно сделать, как только вы прочтете строку «Что-то еще».

0

Вы должны break после поиска '// Пользователи'. Вы продолжаете читать до конца файла.

Смежные вопросы