Всех друзей поздравляем с Новым годом! Всего вам самого наилучшего! Всех благ, здоровья а материальное приложится!
СКРИПТЫ althtmlcssphpjsblog

Файл .dat вместо базы данных.

Поддержи проект!!! smile

База данных в файле .dat. О чем пойдет речь на странице? Я расскажу свой опыт ведения сайта на файлах. И сделаем очередной живой пример и скрипт, который вы сможеет использовать у себя на сайте!

И да! Наш сайт на 100% сделан на файлах!

Файл ".dat" вместо базы данных.

  1. О моей системе хранения данных.
    1. Файл dat вместо базы данных.
    2. Раскладываем данные в переменные.
    3. Как хранится контент в файлах?
  2. Видео: база данных в файле.
  3. Создаем уникальный "ИД"
  4. Как и что, будем хранить данные в файле .dat
  5. Как будем записывать и получать данные из файла
  6. Форма ввода для записи в файл .dat
    1. О моей системе хранения данных.

      Пару слов надо сказать о том → почему!?

      Почему файлы а не база данных!?

      Изначально, у меня было несколько сайтов только на html. И мне все время с первого своего сайта(2009) и до 2016года, когда я начал изучать php, приходилось иметь дело с файлами. Поэтому логичнее всего, что с момента запуска, я начал делать свой новый(данный) сайт на файлах, и уже потом оптимизировать с помощью php. Начал делать редактирование файлов онлайн. См. видео на эту тему.

      Никакой внятно рассказанной информации не было или я просто не нашел!

      Поэтому приходилось до всего доходить самостоятельно!

      Как хранятся данные в файлах!?

      Всего для хранения данных(контента) используются два файла.

      Файл основная информация о странице с контентом.

      Главный файл "rotate" с разрешением ".dat" - "rotate.dat", где построчно - одна строка - одна запись о странице с контентом, поскольку в момент написания данной страницы записи в файле нет, то возьмем строку из предыдущей темы База данных или файл данных:
      2020::12::21::php.png::База данных или файл данных::Хранение данных база или файл?::Марат::page/php/060_baza_dannyih_ili_fayl_dannyih.html::#ALL::PHP/PHP_FILE/DATABASE/PHP_BOOK/

      Об этом файле нужно завести отдельный пункт:



    2. Файл dat вместо базы данных.

      Итак продолжим об основном файле dat - я его условно назвал - "rotate.dat".

      Как получать данные из файла?

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

      $example_get = file_get_contents( путь_на_сервере'rotate.dat');

      Итак. Мы получили в переменную строку. Теперь нам нужно разбить текст построчно в массив! Для этого нам нужна функция explode:

      $example_array = explode("\n",$example_get);

      Далее нам понадобится цикл, в котором будем обрабатывать каждую строку - например все страницы списков обрабатывается именно так.

      for ($i=0; $i < count($example_array); $i++) {
      $line = explode('::',$example_array[$i]);
      }

      Вот в этой переменной $example_array[$i] у нас находится одна строка цикла. Выше приводил пример(сейчас, может быть обьеденил первые три ячейки даты в одну целую дату. Это было сделано давно, просто не стал переделывать):

      2020::12::21::php.png::База данных или файл данных::Хранение данных база или файл?::Марат::page/php/060_baza_dannyih_ili_fayl_dannyih.html::#ALL::PHP/PHP_FILE/DATABASE/PHP_BOOK/

      И в переменную $line мы получаем уже разбитую строку.

      Далее отдельно по строке внутри цикла:



    3. Раскладываем данные в переменные.

      после этого, как мы разбили строку внутри цикла мы получили массив

      Вот он в таком виде:

      Array

      (

      [0] => 2020

      [1] => 12

      [2] => 21

      [3] => php.png

      [4] => База данных или файл данных

      [5] => Хранение данных база или файл?

      [6] => Марат

      [7] => page/php/060_baza_dannyih_ili_fayl_dannyih.html

      [8] => #ALL

      [9] => PHP/PHP_FILE/DATABASE/PHP_BOOK/

      )

      Придумываем переменные и присваиваем данные из строки - просто это более удобно. Чем запоминать число!

      $example_data = $line[2] .'-'. $line[1] .'-'. $line[0];

      $example_img = 'Путь до папки с картинками'.$line[3]; //Если собираетесь использовать картинку. Все-таки веселее чем простой список.

      $example_title = $line[4];//заголовок строки.

      $example_text = $line[5];//текст пояснения, описания строки.

      $example_author = $line[6];//предполагалось, что контент будут добавлять другие пользователи...

      $example_url = $domen . $line[7];//путь http до файла, нам нужен $domen

      $example_sort = $line[8];//ячейка для сортировки, используется, когда нужно выдавать все страницы. - обратите внимание на ссылку - https://dwweb.ru/page?spisok=ALL, из адресной строки получаем get и сортируем по этой переменной(потом коснемся этого вопроса подробнее).

      $example_tags = $line[9];//отдельная ячейка для сортировки по темам, например(опять обратите на адрес...) : https://dwweb.ru/page?tema=DATABASE(не стоит применять ПРОПИСНЫЕ, если для этого нет причины! Не забываем, что мы говорим о 2016)



    4. Итого!

      Работает ли данная система в виде движка - Конечно! Но прошло время и многое из этого, что рассказано выше требует переосмысления!

      В чем неудобность построчного хранения?

      Можно создавать дополнительные ячейки, в конце строки. Но, мне показалось, это неудобным и портит вид самой строки(предвзято...)

      Удаление строки, редактирование строки имеют свои нюансы. Довольно легко запутаться.

      Что мы будем делать!? Я по пунктам буду разбирать тему Сделать сайт пошагово. + на каждый шаг будем делать отдельное видео.

  1. Видео база данных в файле.

    Анонс:

    Данная страница и данное будущее видео будут прономерованы в соответствии с положением, которые они займут на странице как сделать сайт

    Когда дойдет ход до видео, то возьмем ниже идущую теорию и применим на практике, на поддомене http://pro.dwweb.ru/.

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

    После этого, очередной шаг, всё, что мы сделаем, запакуем в архив и он будет доступен для скачивания в подтеме "Движок"

    Следите за обновлением видео на нашем канале youtube.

    Если вы видите эту картинку, то видео уже запланировано и выйдет скоро!Подписываемся, чтобы ничего не пропустить!

  2. Создаем уникальный "ИД"

    Если вы прочитали выше приведенный пример хранения построчно, то к такому способу, кроме неудобства есть множество вопросов!

    К определенному моменту я пришел к мысли, что надо хранить данные в ассоциативном массиве.

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

    1). Вариант №1, создание "ИД" для главной ячейки хранения данных:

    Можно использовать адрес страницы для создания такого ид, например...

    У нас есть переменная, которая выводит адрес данной страницы, $real_page, давайте выведем её здесь, через echo

    https://dwweb.ru/page/php/database/001_fayl_vmesto_bazyi_dannyih_.html
    Пропустим данный адрес через md5, echo md5($REAL_PAGE); :
    b551c60fae3fce4d39cbc49f656a6df7

    Отлично! Мы получили уникальный ид! И он автоматически прикручен к странице с контентом!

    НО! ЕСЛИ!

    Мы должны подумать чуть вперед! А почему!? Просто потому, что мы это уже проходили!

    Так вот! Когда вы соберетесь изменить адрес данной страницы, то ваш "ИД" автоматически поломается!

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

    Вы можете спросить, почему такая проблема заменить эту ячейку массива.

    Дело в том, что это не совсем просто сделать - но не невозможно! Долго рассказывать - не будем в это внедряться, а то сейчас ещё полстраницы !

    1). Вариант №2, создание "ИД" для главной ячейки хранения данных:

    Ваши предложения сделать уникальный ид!? Предлагаю функцию "microtime".

    Давайте выведем echo microtime();

    0.74772200 1611837580

    echo time();

    1611837580
    Возьмем метку времени и первую часть "microtime" до пробела - это микросекунды будут и удалим оттуда "0.".

    $microtime_id=time().str_replace('0.','',(explode(' ',microtime())[0]));

    161183758074772200
    Отрежем последние 2 числа - они всегда будут ноль. С помощью substr

    $page_id= substr(time(). str_replace( '0.', '', (explode(' ', microtime() )[0])),0,-2);

    1611837580747722

  3. Как и что, будем хранить данные в файле .dat

    После того, как мы получили уникальный "ИД" - $page_id, который и будет главной ячейкой для страницы:

    1611837580747722

    Если вы обратите внимание на ниже идущую первую строчку, то вы должны спросить - зачем там условие!

    Это для того, если массив еще не существует, т.е. не создана еще ни одна страница, то создаем пустой массив. Ну а если массив существует, то php вовнутрь по этому условию не зайдет.

    Без данного условия, при каждой отправке данных на запись, массив создавался пустой, с единственной записью. И так каждый раз.

    if(!$main_array) {$main_array = array();}

    $main_array[$page_id][data] = date('d.m.Y');

    $main_array[$page_id][img] = 'php.png';

    $main_array[$page_id][title] = 'База данных или файл данных';

    $main_array[$page_id][description] = 'Хранение данных база или файл?';

    $main_array[$page_id][author] = 'Марат';//Если это будет авторский блог, то данная ячейка не нужна!

    $main_array[$page_id][url] = 'page/php/060_baza_dannyih_ili_fayl_dannyih.html';

    $main_array[$page_id][tags] = 'PHP/PHP_FILE/DATABASE/PHP_BOOK/';

    Выведем первую ячейку, которая у нас получилась:

    Array

    (

    [1611837580747722] => Array

    (

    [data] => 28.01.2021

    [img] => php.png

    [title] => База данных или файл данных

    [description] => Хранение данных база или файл?

    [author] => Марат

    [url] => page/php/060_baza_dannyih_ili_fayl_dannyih.html

    [tags] => PHP/PHP_FILE/DATABASE/PHP_BOOK/

    )

    )

  4. Как будем записывать и получать данные из файла

    В данном пункте, хочу обратить ваше внимание!

    Что запись будет производиться "ВСЕГДА" в конец массива. Но нам нужно, чтобы свежая запись всегда была сверху. Просто, чтобы не мучаться с реверсом при выдаче, лучше помучаться с реверсом при записи!

    Собака "@" нужна для того, чтобы при не существующем массиве, не выдавало ошибку...

    Получаем данные file_get_contents

    Из нашего будущего файла "$dir_rotate" - путь естественно должен быть на сервере

    Нам понадобится функция unserialize

    Переменная "$reverse_ok" - нам понадобится ниже, - надеюсь по названию понятно почему!? Чтобы развернуть массив.

    $main_array = @unserialize(file_get_contents($dir_rotate));

    if(!$main_array) {$main_array = array();} else {$main_array= array_reverse($main_array); $reverse_ok=1;}

    Ниже... тот массив, который мы создавали... в предыдущем пункте.

    $main_array[$page_id][data] = date('d.m.Y');

    $main_array[$page_id][img] = 'php.png';

    $main_array[$page_id][title] = 'База данных или файл данных';

    $main_array[$page_id][description] = 'Хранение данных база или файл?';

    $main_array[$page_id][author] = 'Марат';

    $main_array[$page_id][url] = 'page/php/060_baza_dannyih_ili_fayl_dannyih.html';

    $main_array[$page_id][tags] = 'PHP/PHP_FILE/DATABASE/PHP_BOOK/';

    Далее проверяем был ли перевернут массив $reverse_ok, если да, то возвращаем в нормальное направление

    Нам нужна строка, поэтому превратим массив в строку - serialize

    Записываем file_put_contents

    if($reverse_ok){ $main_array= array_reverse($main_array);}

    $write_for_main = @file_put_contents($dir_rotate, serialize($main_array));

    Соберем весь код вместе:

    $main_array = @unserialize(file_get_contents($dir_rotate));

    if(!$main_array) {$main_array = array();} else {$main_array= array_reverse($main_array); $reverse_ok=1;}


    $main_array[$page_id][data] = date('d.m.Y');

    $main_array[$page_id][img] = 'php.png';

    $main_array[$page_id][title] = 'База данных или файл данных';

    $main_array[$page_id][description] = 'Хранение данных база или файл?';

    $main_array[$page_id][author] = 'Марат';

    $main_array[$page_id][url] = 'page/php/060_baza_dannyih_ili_fayl_dannyih.html';

    $main_array[$page_id][tags] = 'PHP/PHP_FILE/DATABASE/PHP_BOOK/';


    if($reverse_ok){ $main_array= array_reverse($main_array);}

    $write_for_main = @file_put_contents($dir_rotate, serialize($main_array));

  5. Форма ввода для записи в файл .dat

    Нам нужна форма для записи данных в базу в файле .dat, какие данные будем записывать!?

    Дату - создания записи - date('d.m.Y').

    Картинка, либо будет загружаться новая, или же соответствует папке, в которой будет создаваться новая страница. Если вы думаете, что на каждую новую страницу будете делать новую картинку, то к 10-20 странице вам надоест! Поэтому рекомендую на каждую подтему создать картинку, и чтобы она автоматически загружалась.Чтобы не мучаться, сделаем как у меня на сайте. А уж если вы захотите. то сами измените, так, как вам надо.

    Далее два поля, изменим название ячеек в соответствии с "POST", чтобы потом не путаться! - поскольку они обязательны required, то никаеи условия можно не писать.

    $main_array[$page_id][title_for_main] = $_POST['title_for_main'];
    $main_array[$page_id][description_for_main] = $_POST['description_for_main'];

    Насчет ячейки авторства, если мы говорим, об авторском сайте, то это не обязательно.

    $main_array[$page_id][author] = 'Марат';

    Две ячейки [tags] и [url] - на них остановимся на отдельных страницах, потому, что в двух словах тут не получится.

    style

    <style>.width_100pro {

    max-width: 100%;

    margin-bottom: 20PX;

    WIDTH: 100%;

    padding: 10px 0;

    box-sizing: unset;

    }

    .sticky{ position: sticky;

    top: 3px;

    }

    </style>

    Html:

    <form method="post" action="" class="form">

    <input class="width_100pro sticky" type ="submit" name="submit" value="отправить">

    <hr>

    <label class="is_label">Заголовок на главной</label>

    <input type="text" class="width_100pro" name="title_for_main" required>

    <label class="is_label">Текст на главной</label>

    <textarea class="width_100pro" name="description_for_main" id="dw_textarea" required></textarea>

    </form>

    Результат примерно:

    Php:

    <?

      $dir_rotate = '';//Папка и название файла где будет храниться ваш файл базы данных

      $main_array = @unserialize(file_get_contents($dir_rotate));

      if(!$main_array) {$main_array = array();} else {$main_array= array_reverse($main_array); $reverse_ok=1;}

      if($_POST['submit'])

      {

         $main_array[$page_id][data] = date('d.m.Y');

         $main_array[$page_id][title_for_main] = $_POST['title_for_main'];

         $main_array[$page_id][description_for_main] = $_POST['description_for_main'];

         if($reverse_ok){ $main_array= array_reverse($main_array);}

         $write_for_main = @file_put_contents($dir_rotate, serialize($main_array));

      }

    ?>

    P.s.

    На данный момент, здесь остановимся!

    И... запаковывать в архив не будем, запакуем в архив с доработками, после видео!

    И... нумерацию также не делаем...

    Страница кажется незаконченной, потому, что даже у меня осталось такое чувство!

    Вернемся сюда, после того, как сделаем о [tags] и [url]

    Подписывайтесь, чтобы ничего не пропустить!


Вас может еще заинтересовать список тем : #PHP | #PHP_FILE | #DATABASE | #PHP_BOOK |
Последняя дата редактирования : 28.12.2020 00:59
//dwweb.ru/comments_1_5/include/img/hand_no_foto.png
no
no
Еще никто не прокомментировал! COMMENTS+   BBcode
аватар
🞨
Загрузить свой аватар
(max ширина, высота = 200px)

Подписаться + =
Теги:
Файл вместо базы данных.

Последние комментарии :
Марат :
26/01/2021 12:28
Внимание! На странице описывается система комментирования ECOMMENT.SU.Здесь и далее, на всем сайте, стоит другая…
подробнее.
Марат :
26/01/2021 10:58
На сайте, комментирование моё собственное, которое не знаю, когда …
подробнее.
Вали :
26/01/2021 05:51
А вот эти комментарии тут - это же другие, не те о которых статья?Не…
подробнее.
Вали :
26/01/2021 05:44
Привет, классно!
подробнее.
Марат :
25/01/2021 10:08
Спасибо за добрые слова!Всегда пожалуйста!Приходите…
подробнее.