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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Поиск и редактирование информации в текстовом файле
Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014
Помог: 0 раз(а)
Всем добрый день. Прошу гуру php подсказать, как можно реализовать следующую идею... Есть текстовый файл на сервере, в который ведется статистика посещений. Файл в следующем формате (построчно, через пробелы):
[ip-адресс] [кол-раз посещений] [время последнего захода] [браузер]
Стоит особая проблема в редактировании уже имеющейся информации. Например, надо сначала сделать поиск в файле, есть ли такой ip, далее увеличить [кол-раз посещений] на 1 и переписать [время последнего захода] и [браузер]. Как это сделать средствами PHP с учетом того, что строк в файле может быть много, и брать целиком содержимое по file_get_contents не целесообразно, так-как может быть множественное подключение? Открывать и считывать по fopen и fread - это надо будет все равно считывать весь файл чтобы найти нужную строку с IP....
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Используйте sqlite хотя бы.
Как переписать значение в середине файла:
Сохранить куда-нибудь всё, начиная с позиции редактируемой строки, записать новую версию строки, записать всё, что было после редактируемой строки.
----- PostgreSQL DBA
Zuldek
Отправлено: 07 Мая, 2014 - 15:33:51
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
Возможно огорчу, но нельзя найти строку в файле не считав весь ваш файл.
Если религия требует сохранения данных в таком формате и использовать строго файлы, то я бы использовал xml-эквивалент с которым бы комфортно работал средствами SimpleXML или DOM или чем хотите, формируя после изменений ваш текстовый файл.
upd. sqllite также хорошее предложение (если он есть), хотя придётся постоянно держать позицию строки в файле. Всёравно костыль на костыле.
Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014
Помог: 0 раз(а)
Zuldek пишет:
не считав весь файл
да считать полностью файл это просто и быстро и можно распарсить, но как быть, если в одно и тоже время будет несколько обращений к файлу и попыток на запись?
Zuldek пишет:
то я бы использовал xml-эквивалент
нет-нет структура файла может быть и html и xml, не важно, это приблизительный результат как должно выглядеть для админа, который будет смтореть, суть в том, чтобы не использовать SQL, а именно в файловой системе рабоать. Возможны есть гораздо простые варианты , суть проста, счетчик посещений и хранения этого в файловой системе...
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
loveaboveall пишет:
нет-нет структура файла может быть и html и xml, не важно, это приблизительный результат как должно выглядеть для админа, который будет смтореть, суть в том, чтобы не использовать SQL, а именно в файловой системе рабоать. Возможны есть гораздо простые варианты , суть проста, счетчик посещений и хранения этого в файловой системе...
Тогда формулировать нужно вопрос, как задачу, а не как костыльный приговор.
В данном случае, имхо, работа c XML будет проще ибо предустановлены инструменты.
Либо no-sql решения, если есть возмодность их установки.
loveaboveall
Отправлено: 07 Мая, 2014 - 15:46:50
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014
Помог: 0 раз(а)
как будет выглядеть решение , если использовать xml например ? (какой нибудь пример) я в xml-e полный ноль
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
loveaboveall пишет:
будет несколько обращений к файлу и попыток на запись?
А для этого придуманы реляционные базы данных. sqllite в данном случае будет накладывать точно такое же ограничение на одновременную запись несколькими клиентами
Соответственно, можно писать в бд и периодически формировать ваш файл в нужном формате, если он нужен.
Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014
Помог: 0 раз(а)
Zuldek пишет:
loveaboveall пишет:
будет несколько обращений к файлу и попыток на запись?
А для этого придуманы реляционные базы данных. sqllite в данном случае будет накладывать точно такое же ограничение на одновременную запись.
Соответственно, — можно писать в бд и периодически формировать ваш файл в нужном формате, если он нужен.
пока, если отойти от темы...насколько я понял то задачу лучше всего реализовывать именно в SQL ? И открывать подключение к базе при каждом входе пользователя на сайт
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.