Как открыть текстовый файл, прочитать и потом переписать содержимое?

H@7u6a1[0p*2)2[8

Новичок
я так сделал. но подозреваю что это чушь какая то. как то должен быть способ за 1 раз и прочитать и перезаписать

$f1=fopen("count.txt","r");
$txt = fgets($f1);
fclose($f1);
echo $txt;
$f1=fopen("count.txt","w");
fwrite($f1,$txt + 1);
fclose($f1);

Кто то мне посоветовал rewind использовать. Но что такое ревинд я не понял, хотя уже кучу статей прочитал про него. Хотя с ним работает без двойного открывания.
Вообщем буду благодарен если кто пояснит за чтение и перезапись и за ревинд заодно
 

antson

Новичок
Партнер клуба
нет за один раз ты не сможешь внести изменение
пусть у тебя файл из трех строк
один
два
три

задача заменить два на четыре
файл нужно открыть на чтение/запись
файл нужно прочитать
изменить контент
передвинуть указатель на начало файла
записать новый контент
закрыть файл.

если может быть одновременный доступ , то использовать блокировку.
все действия правильнее контролировать на успешность
Если файл открылся то .... иначе ...

если же файл состоит из строк фиксированной длины можно заменить и сразу
открыть файл на запись
передвинуть указатель на (номер_записи-1)*длина записи
записать новые длина записи байт
закрыть файл

p.s. делать счетчик посещаемости на файлах нонсенс.
 

H@7u6a1[0p*2)2[8

Новичок
нет за один раз ты не сможешь внести изменение
пусть у тебя файл из трех строк
один
два
три

задача заменить два на четыре
файл нужно открыть на чтение/запись
файл нужно прочитать
изменить контент
передвинуть указатель на начало файла
записать новый контент
закрыть файл.

если может быть одновременный доступ , то использовать блокировку.
все действия правильнее контролировать на успешность
Если файл открылся то .... иначе ...

если же файл состоит из строк фиксированной длины можно заменить и сразу
открыть файл на запись
передвинуть указатель на (номер_записи-1)*длина записи
записать новые длина записи байт
закрыть файл

p.s. делать счетчик посещаемости на файлах нонсенс.
это счетчик сообщений.

если передвигаешь указатель на начало, то получается новая информация как бы перезаписывает старую?
 

antson

Новичок
Партнер клуба
ну не делают счетчики таким образом ;(
только для обучения навыкам работы с файлами такой пример можно использовать.
чтобы человек понял, что файл нужно лочить иначе при одновременном обращении двух и более запросов.
а) один из них не засчитается
б) файл будет поврежден (как минимум сбросится в начало отсчета.)
 

antson

Новичок
Партнер клуба
@H@7u6a1[0p*2)2[8,
http://php.net/manual/ru/function.rewind.php - правильно посоветовали
только наверно забыли объяснить зачем ;)

вот так проще всего вроде бы написать.
$cnt=file('count.txt');
$cnt++;
....
fwrite($f,$cnt);

но гонки ;( (см выше а и б)

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