Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск и редактирование информации в текстовом файле
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Поиск и редактирование информации в текстовом файле

Страниц (1): [1]
 

1. loveaboveall - 07 Мая, 2014 - 15:22:05 - перейти к сообщению
Всем добрый день. Прошу гуру php подсказать, как можно реализовать следующую идею... Есть текстовый файл на сервере, в который ведется статистика посещений. Файл в следующем формате (построчно, через пробелы):

[ip-адресс] [кол-раз посещений] [время последнего захода] [браузер]

Стоит особая проблема в редактировании уже имеющейся информации. Например, надо сначала сделать поиск в файле, есть ли такой ip, далее увеличить [кол-раз посещений] на 1 и переписать [время последнего захода] и [браузер]. Как это сделать средствами PHP с учетом того, что строк в файле может быть много, и брать целиком содержимое по file_get_contents не целесообразно, так-как может быть множественное подключение? Открывать и считывать по fopen и fread - это надо будет все равно считывать весь файл чтобы найти нужную строку с IP....

Заранее спасибо!
2. Мелкий - 07 Мая, 2014 - 15:28:35 - перейти к сообщению
Используйте sqlite хотя бы.

Как переписать значение в середине файла:
Сохранить куда-нибудь всё, начиная с позиции редактируемой строки, записать новую версию строки, записать всё, что было после редактируемой строки.
3. Zuldek - 07 Мая, 2014 - 15:33:51 - перейти к сообщению
Возможно огорчу, но нельзя найти строку в файле не считав весь ваш файл.
Если религия требует сохранения данных в таком формате и использовать строго файлы, то я бы использовал xml-эквивалент с которым бы комфортно работал средствами SimpleXML или DOM или чем хотите, формируя после изменений ваш текстовый файл.


upd. sqllite также хорошее предложение (если он есть), хотя придётся постоянно держать позицию строки в файле. Всёравно костыль на костыле.
4. loveaboveall - 07 Мая, 2014 - 15:40:32 - перейти к сообщению
Zuldek пишет:
не считав весь файл

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

Zuldek пишет:
то я бы использовал xml-эквивалент

нет-нет структура файла может быть и html и xml, не важно, это приблизительный результат как должно выглядеть для админа, который будет смтореть, суть в том, чтобы не использовать SQL, а именно в файловой системе рабоать. Возможны есть гораздо простые варианты , суть проста, счетчик посещений и хранения этого в файловой системе...
5. Zuldek - 07 Мая, 2014 - 15:43:46 - перейти к сообщению
loveaboveall пишет:
нет-нет структура файла может быть и html и xml, не важно, это приблизительный результат как должно выглядеть для админа, который будет смтореть, суть в том, чтобы не использовать SQL, а именно в файловой системе рабоать. Возможны есть гораздо простые варианты , суть проста, счетчик посещений и хранения этого в файловой системе...

Радость
Тогда формулировать нужно вопрос, как задачу, а не как костыльный приговор.
В данном случае, имхо, работа c XML будет проще ибо предустановлены инструменты.

Либо no-sql решения, если есть возмодность их установки.
6. loveaboveall - 07 Мая, 2014 - 15:46:50 - перейти к сообщению
как будет выглядеть решение , если использовать xml например ? (какой нибудь пример) я в xml-e полный ноль

и снова вопрос о множественном подключении...
7. Zuldek - 07 Мая, 2014 - 15:51:06 - перейти к сообщению
loveaboveall пишет:
будет несколько обращений к файлу и попыток на запись?

А для этого придуманы реляционные базы данных. sqllite в данном случае будет накладывать точно такое же ограничение на одновременную запись несколькими клиентами
Соответственно, можно писать в бд и периодически формировать ваш файл в нужном формате, если он нужен.
8. loveaboveall - 07 Мая, 2014 - 15:54:04 - перейти к сообщению
Zuldek пишет:
loveaboveall пишет:
будет несколько обращений к файлу и попыток на запись?

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


пока, если отойти от темы...насколько я понял то задачу лучше всего реализовывать именно в SQL ? И открывать подключение к базе при каждом входе пользователя на сайт
9. Zuldek - 07 Мая, 2014 - 15:57:33 - перейти к сообщению
loveaboveall пишет:
И открывать подключение к базе при каждом входе пользователя на сайт
Если есть необходимость в использование бд, то разумеется.
10. loveaboveall - 07 Мая, 2014 - 15:59:41 - перейти к сообщению
Zuldek пишет:
loveaboveall пишет:
И открывать подключение к базе при каждом входе пользователя на сайт
Если есть необходимость в использование бд, то разумеется.


имеется ввиду только для счетчика есть ли необходимость гонять БД ? так БД не нужна. сайт без БД.

 

Powered by ExBB FM 1.0 RC1