клуб PHP
клуб заведен 16-03-2003
постоянные читатели [14]
501, Arm0, cadaver, Dark, Delia Grey, diteX, Genux, LinkMan, Query, Santail, Svetlika, Urkagan, wanglo, zar
хранители [1]
zar
участники [15]
501, Alick, Arm0, Azimmers, cadaver, d-r Hogart, d0Xt0r, Delia Grey, diteX, maybe_we, Query, Santail, wanglo, zar, Звёздный Капитан
закладки:
цитатник:
клуб:
интересы [3]
23-05-2004 10:14 Delia Grey
Мне нужно, чтобы в моей гостевой книге сообщения, добавленные позже по времени, отображались вверху страницы, а ранние - внизу.

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

В чём тут проблема и как её решить?
Заранее спасибо!
Комментарии:
Камрад
Если помещать запись в начало файла, то он будет затираться. Чтобы добавить запись в конец файла, 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.
23-05-2004 11:00
дитё несмышлёное
kuchamusora
собственно, поначалу я и сделала с записью в конце.
большое спасибо за совет!
Камрад
Можно ещё ставить перед каждой записью метку, ASC 0 вполне сойдёт. Записи будут добавляться в конец файла, а при отображении надо будет читать файл с конца и печатать всё что между метками. "Двигаться" по файлу можно с помощью lseek().
Камрад
Не за что :)
Опечатался. fseek, а не lseek.
23-05-2004 13:56
дитё несмышлёное
kuchamusora

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

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

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

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


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

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