Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пишем класс для работы с файлами как с бд, дружненько ! 
:(
    Опции темы
Sardar
Дата 23.4.2003, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Пример: data.dat
Код

ch:имя|:|фамилия|:|и|:|так|:|далее
|:|сколь|:|угодно|:|полей|:|в заголовке
ct:Тело сообщения тоже может быть любого размера. Главное что бы
не появилось комбинации \r\nsignature: , где возможные подписи
это: 'ch', 'ct', 'ah', 'an'. 'C' это собщение от пользователя, 'A' это ответ модератора.
'H' соответственно заголовок сообщений.
ah:Я|:|такой|:|то|:|и|:|такой|:|то|:|с такими|:|то|:|правами
an:Ответил!!!
ch:Заголовок|:|второго|:|сообщения
ct:Поля ah: и an: не обязательны.

Пример offsets.dat
Код
0000041500000486



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
IZ@TOP
Дата 23.4.2003, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
Класс писал для гостевой, но в принципе он подойдет (с небольшими переделками) для любой задачи.


1) Это почти оффтоп ...
2) Так переделай ...
3) Мы пишем как я уже говорил - класс который читает и записывает в базу (плюс наверное надо еще наверное поиск по базе сделать (тока с хардом своим дома разберусь ...).. а функции вывода и форматирования здесь не придусмотрены, считай почти база данных ...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Sardar
  Дата 23.4.2003, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Цитата
1) Это почти оффтоп ...

Да-а-а... bored.gif

Цитата
3) Мы пишем как я уже говорил - класс который читает и записывает в базу (плюс наверное надо еще наверное поиск по базе сделать (тока с хардом своим дома разберусь ...).. а функции вывода и форматирования здесь не придусмотрены, считай почти база данных ...

Если я тебя правильно понял, то нужно просто писать всякую лажу в некий файл, а затем рытся там в поискаx какого-нибудь слова.
Плюс поддержка регулярныx выражений. dontgetit.gif dontgetit.gif

Попробуй придумать xотя бы две ситуации где можно было бы использовать такой код...


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
IZ@TOP
Дата 23.4.2003, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
Попробуй придумать xотя бы две ситуации где можно было бы использовать такой код...

Гостевая, новости, форум, база юзеров какогонибудь ресурса [пример - http://ultra.dax.ru/services/top-log/index.php все что там есть данные, все сохранено в файлах (даже пример дал smile.gif)], собственно ты хотел сказать "нати вам, покавыряйтесь, может чего и поймете ... ", я же ясно писал что этот класс должен предоставлять некоторые возможности котрые есть в БД ... не хочешь помогать - не надо ....


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Sardar
Дата 23.4.2003, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Приношу мои извинения для теx кто меня не понял.

Я xотел показать способ соxранения и обработки данныx, который в какой-то мере отказобезопасен. Наверное это действительно оффтоп.

Ты бы лучше написал какие возможности должен реализовывать этот класс.

Можно действительно сделать класс который чуть ли не со SQL будет работать. Это не так сложно, вчера только закончил парсер который сможет
разбирать подобный синтаксис.

Вопрос в скорости и кому это надо.

Хотя не плоxо сделать проложенице, которое бы зачитывало специальный файл сописанием формата, а затем предостовляло бы доступ к данным определенного файла.

Хорошо для утилит по уходу за сайтом, но не подходит для нагруженных систем.



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
IZ@TOP
  Дата 23.4.2003, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
Приношу мои извинения для теx кто меня не понял.

Извиняю biggrin.gif ... хотя и приношу свои извинения за напор wink.gif ...
Sardar На самом деле я хотел сделать класс который бы очень упростил подобную обработку, там на подобие гостевой, новостной ленты, и тому подобного ... просто я думаю много кому будет подобная вещь полезна (я вот допустим сижу на беспл. хостинге, и мне платить 5 копустой в месяц за бд не очень охото confused.gif ), так вот подробнее - значит так: ну во первых там не требуется не чего подобного вроде SQL запросов ... это конечно просто, но усложнит работу с данным классом (а я ведь хочу все упростить) confused.gif
Потом должна быть проверка при сохранении - не ввел ли пользователь символ который разделяет значения в файле ...
При чтении как я уже в примере привел, надо чтоб массив загружался в незовисимости от количества разделителей . И самое на мой взгляд главное, это как можно больше, и самое главное легкопонимаемых комментариев, а также дока как с данным классом работать, и несколько примеров использования (я там кажется что то уже писал по этому поводу ...) notify.gif


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
arial
  Дата 23.4.2003, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: 6
Всего: 7



Код
class fdb {
var $db_dir; // Директория с базами
var $db_name; // Имя файла базы данных
var $exp;  // Разделитель
var $rev;  // Реверсировать ли базу (1/0) (новые записи вверху/внизу)
var $db;  // Вывод базы данных
var $_error; // Массив ошибок

// Проверяет ошибки
function fatal_error(){
 if(empty($this->db_dir)) $this->_error[]="<b>Неустранимая ошибка!</b><br>Не объявлено значение переменной <b>\$db_dir</b>.<br>";
 if(empty($this->db_name)) $this->_error[]="<b>Неустранимая ошибка!</b><br>Не объявлено значение переменной <b>\$db_name</b>.<br>";
 if(!file_exists($this->db_dir.$this->db_name)) $this->_error[]="<b>Неустранимая ошибка!</b><br>Файла <b>$this->db_name</b> не существует.<br>";
}
// Выводит данные (Iz@top TM)
function load_fdb(){
 $this->fatal_error();
 if(empty($this->exp)) $this->exp="|";
 if(empty($this->_error)) {
  $line=file($this->db_dir.$this->db_name);
  if($this->rev==1) $line=array_reverse($line);
  for($i=0;$i<count($line);$i++) {
   $etmp=explode($this->exp,$line[$i]);
   for($ei=0;$ei<count($etmp);$ei++) $this->db[$i][$ei]=$etmp[$ei];
  }
 } else {
  foreach($this->_error as $value) echo $value;
  exit;
 }
}
// Запись новых данных
function write_fdb($data){ // $data-массив данных для записи  
 $this->fatal_error();
 if(empty($data)) $this->_error[]="<b>Внимание!</b><br>Определитесь, что Вы будете записывать в ФБД.<br>";
 if(empty($this->_error)) {
  if(empty($this->exp)) $this->exp="|";
  foreach($data as $value) $wtmp.="$value$this->exp"; // Заносим данные по порядку в переменную,
  $wtmp.="\n";          // добавляем разделители и в конце \n
  $open_file=fopen($this->db_dir.$this->db_name,"a");
  flock($open_file,2);
  @fwrite($open_file,$wtmp) or die("Невозможно записать в файл");
  fclose($open_file);
 } else {
  foreach($this->_error as $value) echo $value;
  exit;
 }
}
// Редактирование данных
function edit_fdb($data){ // $data-массив исправленных данных для записи
 $this->fatal_error();
 if(empty($data)) $this->_error[]="<b>Внимание!</b><br>Определитесь, что Вы будете записывать в ФБД.<br>";
 if(empty($this->_error)) {
  if(empty($this->exp)) $this->exp="|";
  $line=file($this->db_dir.$this->db_name);
  for($i=0;$i<count($line);$i++) {
   if(@ereg("^$data[0]\|",$line[$i])) {
    // Здесь и далее предполагается, что нулевой
    // элемент строки файла БД будет его неизменяемый ID
    // по которому запись можно искать, после чего
    // редактировать или удалять.
    // Например:
    // 59364|name|mail|message|...|\n
    // Здесь 59364 будет ID
    foreach($data as $value) $wtmp.="$value$this->exp";
    $line[$i]=$wtmp."\n";
   }
  }
  $open_file=fopen($this->db_dir.$this->db_name,"w");
  flock($open_file,2);
  for($i=0;$i<=count($line);$i++) fwrite($open_file,"$line[$i]");
  fclose($open_file);
 } else {
  foreach($this->_error as $value) echo $value;
  exit;
 }
}
// Удаление данных
function del_fdb($data) { // $data-массив ID удаляемых данных
 $this->fatal_error();
 if(empty($data)) $this->_error[]="<b>Внимание!</b><br>Определитесь, что Вы хотите удалить из ФБД.<br>";
 if(empty($this->_error)) {
  $line=file($this->db_dir.$this->db_name);
  $shablon="(^$data[0]\|)"; // Создаем шаблон для поиска удаляемой строки
  if(count($data>1)) { // Если удаляем более одной строки, добавляем все альтернативы
   for($i=1;$i<count($data);$i++) $shablon.="|(^$data[$i]\|)";
  }
  for($i=0;$i<count($line);$i++) {
   if(preg_match("/$shablon/",$line[$i])) unset($line[$i]);
  }
  $open_file=fopen($this->db_dir.$this->db_name,"w");
  flock($open_file,2);
  for($i=0;$i<=count($line);$i++) {
   if(isset($line[$i])) fwrite($open_file,"$line[$i]");
  }
  fclose($open_file);
 } else {
  foreach($this->_error as $value) echo $value;
  exit;
 }
}
}

Здесь нет только поиска, хотя алгоритм можно переделать из ф-ии del_fdb(), приведенной выше.


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
Mark.dll
Дата 24.4.2003, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 28.2.2003
Где: Эстония, Нарва

Репутация: нет
Всего: нет



Цитата(arial @ 22.4.2003, 17:34)
Цитата(Iz @ 22.4.2003, 09:14)
Боюсь мой друг что проблема в том что цикл while работает быстрее чем for ...

Да...
Согласен. confused.gif

А я не согласен...
--------------------
"I wish I could change the world..."
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 24.4.2003, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
А я не согласен...

И почему же ? Обоснуй !


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Mark.dll
Дата 24.4.2003, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 28.2.2003
Где: Эстония, Нарва

Репутация: нет
Всего: нет



Не знаю, где-то в книгах или доках встречал. А вообще скорость эта не так важна в таких скриптах. Если нужна скорость, то надо писать cgi-сценарии на Assembler biggrin.gif
--------------------
"I wish I could change the world..."
PM MAIL WWW ICQ   Вверх
IZ@TOP
  Дата 24.4.2003, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
Не знаю, где-то в книгах или доках встречал

А вот это ты зря - книга называется РНР - руководство разработчика (изд. Diasoft), там сказано обратное, если не вериш, можеш сам проверить ...

И еще вопросик -
213.35.228.98
24.04.2003 - 15:31
Mozilla/4.0 (compatible; MSIE 6.0; Windows )

Это был ты ?

Это сообщение отредактировал(а) Iz@top - 24.4.2003, 15:03


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Mark.dll
Дата 24.4.2003, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 28.2.2003
Где: Эстония, Нарва

Репутация: нет
Всего: нет



Возможно ты прав насчёт скорости while. Просто у меня уже каша из информации в голове собралась с этих книг. Возможно я, но это надо спрашивать в личных сообщениях. Это я на твой сайт сходил? Или на ваш community? Раньше у меня другой ip был... Да, точно мой.
--------------------
"I wish I could change the world..."
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 24.4.2003, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
Это я на твой сайт сходил?

Лично мой ... правда он еще не доработан ... точнее говоря я его вообще в третий раз переделывать собираюсь ...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
arial
  Дата 24.4.2003, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: 6
Всего: 7



Цитата(Mark @ 24.4.2003, 12:15)
Цитата(arial @ 22.4.2003, )
Цитата(Iz @ 22.4.2003, )
Боюсь мой друг что проблема в том что цикл while работает быстрее чем for ...

Да...
Согласен. confused.gif

А я не согласен...

Почему я согласился с многоуважаемым Iz@topом, потому, что сразу протестировал циклы. Выводы неутешительны. Цикл for работает в полтора, а foreach в два раза медленнее цикла while. А скорость в задуманном в этом топике классе действительно очень важна. В данном случае необходимо перевернуть такой объем данных за столь короткий промежуток времени.

Впринципе поэтому, помозговав на досуге я решил применить схему достопочтенного Sardarа для сохранения данных (т.е. одна мессага/новость - один файл, а индексы в отдельном файле, по которому происходит поиск нужной информации) Запись/удаление файлов я уже сделал (всё на автомате, ничего вручную удалять не надо), редактирование сделать - раз плюнуть. А скорость просто потрясающая по сравнению с классом, который я привел несколько раньше (Дата 23.4.2003, 18:18). Конечно везде, где смог заменил for на while. smile.gif


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
IZ@TOP
Дата 25.4.2003, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
Почему я согласился с многоуважаемым Iz@topом, потому, что сразу протестировал циклы. Выводы неутешительны. Цикл for работает в полтора, а foreach в два раза медленнее цикла while. А скорость в задуманном в этом топике классе действительно очень важна. В данном случае необходимо перевернуть такой объем данных за столь короткий промежуток времени.

Впринципе поэтому, помозговав на досуге я решил применить схему достопочтенного Sardarа для сохранения данных (т.е. одна мессага/новость - один файл, а индексы в отдельном файле, по которому происходит поиск нужной информации) Запись/удаление файлов я уже сделал (всё на автомате, ничего вручную удалять не надо), редактирование сделать - раз плюнуть. А скорость просто потрясающая по сравнению с классом, который я привел несколько раньше (Дата 23.4.2003, 18:18). Конечно везде, где смог заменил for на while. 

Если честно то я ни когда этими циклами и не пользовался ... ну разве что только один раз foreach применил, и все ...

На счет того что лучше все в разные файлы писать, это возможно конечно наилучший вариант, но мы то класс пишем чтоб он один файл обрабатывал ... а на счет маленького бд, так оно наверное и получается, если будем в кучу файлов писать ... но это уже как говорится - отдельный топик biggrin.gif


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1398 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.