Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Требуется помощь по PHP  (Прочитано 10100 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Slavik333
Гость
« : 06-07-2005 17:28 » 

 У меня есть  гостевая , сообщения и данные записываются в файл *.dat , как мне стереть какую-нибудь строку из файла ?
С помощью функции fwrite(); у меня не выходит , подскажите , как лучше...
Может мне нужно узнать длинну строки , потому что для записи через fwrite я должен указать какие либо символы ...
   Какое расширение предоставляет максимальновозможную безопасность :
*.dat, *.php, (*.txt сам знаю,что нет) ?
« Последнее редактирование: 06-07-2005 17:34 от Slavik333 » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-07-2005 18:32 » 

Т.е. надо понимать, что файл текстовый?
Под словом "стереть строку" можно понимать, как запись поверх удаляемой строки какой-либо строки той же длины (напр. строка пробелов), так и удаление со сдвигом нижележащих строк вверх.
В первом случае тебе нужно узнать длину строки, встать на позицию начала строки в файле и записать новую строку поверх.
Во втором случае нужно считать весь файл в память, удалить его на диске и создать заново (либо создать с обрезанием) и записать все обратно, кроме удаляемой строки. Возможны варианты по этому случаю.

И в первом и во втором случае скорость операций линейно зависит от объема данных.
Кроме того, во втором случае, пока файл перезаписывается, параллельный запрос не сможет работать с ним. Для борьбы с возможными конфликтами рекомендую блокировать файл на все время работы с ним.

Гиморройно? Намного проще использовать СУБД.
« Последнее редактирование: 06-07-2005 18:33 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Slavik333
Гость
« Ответ #2 : 06-07-2005 18:45 » 

 На счёт бд - ты прав на 100%,но по моему с текстовым файлом легче и быстрее научиться относительно сложным циклам и массивам начинающему .
А объём инфы будет большой и строку мне нужно удолять полностью . А про блокировку я ещё не совсем догнал...
Если я его запираю flock($fp, 1); , так остальные не смогут в это время читать сообщения ,так?Тогда понту мало...
А если админу преспичило в уборную , а после он забыл и пошёл спать Не понял ?
А вдруг explorer повис и скрипт вместе с ним , а до flock($fp, 3); дело не дошло?

P.S
Можно не большой пример?
« Последнее редактирование: 06-07-2005 19:02 от Slavik333 » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 06-07-2005 19:37 » 

Slavik333, повис там ie, ил не повис - веб-серверу до лампочки - скрипт отработает и файл освободит. Админ тут вообще не причем.
Подумай над конфликтами паралелльных запросов.

Обязательно прочти это: http://www.php.net/manual/ru/function.flock.php
Блокировка, как написано там, не работает на FAT и NFS.

Чтение строки:
Код:
<?php
$f 
fopen($filename, &#39;r&#39;);

flock($f,LOCK_SH);

//.....чтение файла

fclose($f);
?>

Удаление строки:
Код:
<?php
$f 
fopen($filename, &#39;r+&#39;);
flock($f,LOCK_EX);

//...поиск строки

//...сохранение всех данных после строки

ftruncate($f_позиция_строки_); // обрезание

//...запись сохраненных данных
flock($fLOCK_SH);

// тут можно читать файл

fclose($f);
?>

« Последнее редактирование: 20-12-2007 20:16 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PantiL
Гость
« Ответ #4 : 09-07-2005 18:24 » 

На счет баз данных позволю не согласиться, что сложнее научиться - базы данных проще намного чем работа с файлами...
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #5 : 09-07-2005 20:20 » 

На счет баз данных позволю не согласиться, что сложнее научиться - базы данных проще намного чем работа с файлами...
А вот это уже кому как Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
PantiL
Гость
« Ответ #6 : 09-07-2005 21:17 » 

Я тоже боялся баз, пока не начал с ними работать... Все неизвестно естрашно...
Кстати чего боялся, тем теперь и пользуюсь.
Записан
Slavik333
Гость
« Ответ #7 : 12-07-2005 06:21 » 

 
На счет баз данных позволю не согласиться, что сложнее научиться - базы данных проще намного чем работа с файлами...
Именно по этому я и написал,что считаю,что лучше учиться на текстовых файлах...
Тяжело в ... легко в ... Отлично
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines