Попробуйте изменить:
$fp = fopen($logfile,'w');
на
$fp = fopen($logfile,'a');
в ваших
if( $pieces[0] == $player->name ) ...
PHP.fopen режимах открытия файлов;)
РЕДАКТИРОВАТЬ Вы можете переопределить запись своего игрока, поместив fwrite()
после цикла foreach, переопределив весь файл с объединенными строками (это может вызвать проблемы с производительностью).
Или
Попробуйте циклически построчно использовать fgets()
, а затем, если вы найдете правильное совпадение, используйте fseek()
для предыдущей строки и переопределите его;)
fgets () fseek ()
ВТОРОЕ РЕДАКТИРОВАНИЕ
<?php
$find = 'player_1';
$h = fopen('play.txt','r+');
$prev_pos = 0;
while(($line = fgets($h, 4096)) !== false){
$parts = explode(' ', $line);
if($parts[0] == $find) {
fseek($h, $prev_pos);
fwrite($h, "player_222 12 22 411");
break;
}
$prev_pos = ftell($h);
}
fclose($h);
?>
Пример кода по запросу;) Идеясохранить предыдущую позицию строки, а затем использовать ее для fseek
и переопределить.Я не уверен, что fwrite
будет хорошо работать на всех средах без PHP_EOL
в конце строки, но на моем все нормально.