Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование для начинающих и не только


Информационный Канал Subscribe.Ru


Загрузка и сохранение данных в РНР

ВВЕДЕНИЕ

Каждый начинающий веб-мастер ни раз задавал себе вопрос о том, как правильно сохранять данные, с которыми работает скрипт. Я тоже задавал себе этот вопрос. И я нашел хороший способ. Как всем известно – PHP очень мощный язык, с каждым выходом новой версии у него появляются множество новых «фишек», он так же пополняется дополнительными библиотеками, которые увеличивают его мощность, позволяют работать с различными базами данных MSSQL, mSQL,…, ну и т.д. Так вот, в какой-то из всех этих «серий» появились замечательные функции SERIALIZE и UNSERIALIZE. Что же они представляют, и как их кушать разберемся поподробнее ниже.

ФУНКЦИЯ SERIALIZE

Как написано в справочнике http://www.php.net , функция появилась в версии ПХП 3.0.5 и доступна во всех более поздних версиях. И так что же представляет из себя эта функция.

string serialize ( mixed value )

- Принимает одно значение: mixed value

Это значение может быть любым от одиночной переменной до объекта.

- Возвращает: string

Что собой представляет возвращаемое значение?
Это структура передаваемого ей параметра, рассмотрим пример:

<?php
$a = "hello world!";
echo serialize($a)."<br>";
$a = 1;
echo serialize($a)."<br>";
$a = array("1","2",3,"PHP");
echo serialize($a)."<br>";
?>

Если вы запустите этот скрипт, то на экране у вас появится:

s:12:"hello world!";
i:1;
a:4:{i:0;s:1:"1";i:1;s:1:"2";i:2;i:3;i:3;s:3:"PHP";}

Примечание: Если вы не знаете, как запустить скрипт, то вам нужно его либо закачать на какой-нибудь сервер (хостинг), где есть поддержка PHP желательно не ниже 4 версии, либо поставить у себя на компьютере Apache + PHP. Как ставить это ПО в Интернете полно информации, просто в поисковой машине наберите Apache + PHP и все будет отлично.

Сразу возникает вопрос, «как это понять?», и «как это использовать?».
Как понять – просто.
Как использовать – до этого мы еще дойдем.

Посмотрите на первую строчку выдаваемого результата и на первое объявление переменной “a”:

$a = "hello world!";
s:12:"hello world!";

Видно, что переменная «а» - строковая переменная, т.е. имеет тип “string”, длинна данной строки "hello world!", если посчитать – 12 символов, а теперь посмотреть на результат функции SERIALIZE. Нашли сходство???? Если да, то я за вас рад, если нет – зачем вам программирование? Но это я шучу, давайте разберемся:

«s» - это тип переменной – string;
12 – это длинна строки "hello world!";
«:» - разделитель данных;
«;» - закрывает данные текущей переменной.

Давайте посмотрим на вторую перемену в коде и на второй результат:

$a=1;
i:1;

Переменная «а» - число – integer, т.е. буква «i» означает тип переменной, значение – «1».

А теперь самое интересное:

$a = array("1","2",3,"PHP");
тут не одна переменная, а тут структура данных такая как массив. Разберемся:

a:4:{i:0;s:1:"1";i:1;s:1:"2";i:2;i:3;i:3;s:3:"PHP";}

Первая «а» говорит что данные – массив, цифра 4 после двоеточия – количество элементов массива, затем в фигурных скобках перечисляются все внутренние переменные, а о них мы говорили выше.

Как использовать эти результаты работы функции SERIALIZE.

Мы их будем использовать как данные для хранения на диске. Как это сделать? Для этого воспользуемся обычными методами записи данных в файл:

<?php
$a=array("num"=>2,array("page1"=>"hello","page2"=>"куку"));
$data=serialize($a);
$fn=fopen("file.txt","w");
fwrite($fn,$data);
fclose($fn);
?>

или оптимизировав код:

<?php
$fn=fopen("file.txt","w");
fwrite($fn, serialize(array("num"=>2,array("page1"=>"hello","page2"=>"bay"))));
fclose($fn);
?>

После запуска скрипта получим файл, содержащий следующие данные:

a:2:{s:3:"num";i:2;i:0;a:2:{s:5:"page1";s:5:"hello";s:5:"page2";s:4:"куку";}}

попрошу разобраться с этими данными самостоятельно, и попробуйте по ним восстановить переменную $a.

ФУНКЦИЯ UNSERIALIZE

Так вот, продолжим, сохранить то мы сохранили, но нужен алгоритм для возврата этих данных из файла, как это реализовать, очень просто – UNSERIALIZE, все догадались сразу же, то, что она делает.

Что же представляет из себя эта функция:

mixed unserialize ( string str [, string callback] )

- Принимает: string str и [, string callback]
- Возвращает: mixed

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

Принимает функция как раз ту строку, которую нам надо восстановить в переменную, рассмотрим пример:


<?php
$a=”i:1;”;
echo unserialize($a);
$a=’s:10:”1234567890”;’;
echo unserialize($a);
$a=’a:2:{s:3:"num";i:2;i:0;a:2:{s:5:"page1";s:5:"hello";s:5:"page2";s:3:"bay";}}’;
echo unserialize($a);
?>

А вот результат работы кода:

1
1234567890
Array ( [num] => 2 [0] => Array ( [page1] => hello [page2] => bay ) )

Как видно первая строка – переменная типа integer со значением 1;
Вторая это – строка, длинной 10 символов;
Третья – это уже сложные данные, многомерный хеш массив, его исходный формат нужно искать выше.

ЗАКЛЮЧЕНИЕ

Вот это и есть один из множества способов хранения данных, у него есть плюсы:
- Не требует ничего от хостинга кроме PHP версии не ниже 3
- Для работы нужно всего 2 функции.
Минусы, у меня нет, но если такие будут, то обязательно напишите мне mailto:wm-kbp@list.ru

И еще, на основе этого алгоритма, я написал электронный прайс-лист, который работает очень быстро, и хранит в файле до 3000 записей, причем структура этого прайса не линейная, т.е. это многомерный хеш массив.


Все вопросы на мыло:
ODUVAN
Мыло: wm-kbp@list.ru Хомяк: http://www.netic.web.ur.ru
GigaByte Мыло: 1099511627776@mail.ru Хомяк:http://www.g299792458.boom.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное