Delia Grey
10:14 23-05-2004
Мне нужно, чтобы в моей гостевой книге сообщения, добавленные позже по времени, отображались вверху страницы, а ранние - внизу.

Но когда в функции fopen() указываешь параметр r+, чтобы новая запись помещалась в начало текстового файла, то новый текст просто накладывается на старый, и в итоге ранние сообщения отображаются только кусками. А у меня в книжке написано, что всё должно проиисходить так как и задумано.

В чём тут проблема и как её решить?
Заранее спасибо!
Комментарии:
Звёздный Капитан
10:56 23-05-2004
Если помещать запись в начало файла, то он будет затираться. Чтобы добавить запись в конец файла, fopen надо вызывать с флагом "'a+" (Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, attempt to create it.)
Если очень нужно поместить запись была в начале файла, то легче всего писать её во временный файл, а потом добавлять содержимое "оригинального" файла к временному. После этого, временный переименовывается в оригинальный.

На php.net лежит хелп с полным описанием всех функций php.
Delia Grey
11:00 23-05-2004
kuchamusora
собственно, поначалу я и сделала с записью в конце.
большое спасибо за совет!
Звёздный Капитан
11:04 23-05-2004
Можно ещё ставить перед каждой записью метку, ASC 0 вполне сойдёт. Записи будут добавляться в конец файла, а при отображении надо будет читать файл с конца и печатать всё что между метками. "Двигаться" по файлу можно с помощью lseek().
Звёздный Капитан
11:06 23-05-2004
Не за что
Опечатался. fseek, а не lseek.
Delia Grey
13:56 23-05-2004
kuchamusora

вот какие оказывается бывают книжки дурацкие там написано что при r+ ничего затираться не будет, а будет всё как надо

вроде с временным файлом получается.

отредактировано: 23-05-2004 17:32 - Delia Grey

Murchik
16:24 24-05-2004
товарищи, не ибите мозг гражданке (или гражданцу, простите, толком не уяснил)... мускул рулит и точка
Бумагус
16:29 24-05-2004
вот это мозгоипание внатуре... люди, очнитесь! хлоп-хлоп! %)))
Звёздный Капитан
20:13 24-05-2004
Murchik Сильф Сам я для этих целей использую mysql, но меня спрашивали о работе с файлами. Я не уточняю по какой причине Delia Grey решила хранить данные в файлах, может быть на машине провайдера нет mysql или она просто учится PHP.
Будьте пожалуйста вежливы к собеседникам, это ведь форум по програмированию, а не чат для "флейма".
zar
23:53 24-05-2004
Murchik Сильф повежливее!
тем более при девушке.


а если по теме:
исходя из постановки вопроса(записать N байт в начало файла) я бы сделал как писал kuchamusora в своём первом посте.
но вообще интересно узнать, как именно ты хранишь записи в файле?
уже отформатированные чтоли?

если просто как данные, то не пробовала смотреть в сторону serialize/unserialize? сериализация+массивы позволяют делать очень много .
Гость
16:33 24-06-2005
А нахрена вообще писать в начало файла?
$news=file($myfolder."/data.dat");
$news=array_reverse($news);
переверни массив, и будет ништяк!