ФорумФорум  КалендарьКалендарь  ЧаВоЧаВо  ПоискПоиск  ПользователиПользователи  ГруппыГруппы  РегистрацияРегистрация  Вход  
Поиск
 
 

Результаты :
 
Rechercher Расширенный поиск
Последние темы
» Подтверждение о прочтении
автор worker8281 Сб Дек 27, 2014 1:05 pm

» Проблема с сессией
автор Murphy Ср Дек 03, 2014 5:20 pm

» Нужнга настройка SugarCRM
автор iliandr777 Пн Ноя 10, 2014 2:28 pm

» Отображение записей (адресатов) в списках адресатов
автор FatherMother Пн Авг 25, 2014 12:21 pm

» Нужен совет. Модуль с множеством одинаковых субпанелей.
автор Павел Пн Июл 28, 2014 12:55 pm

» Нужна помощь с опенкартом
автор manux86 Вс Фев 02, 2014 10:45 am

» вопрос работы насчет СУГАР на сервере
автор Meiir2 Пт Янв 31, 2014 8:46 am

» Интеграция с Google календарем от компании "Куб Три"
автор Dmitry.bereza Ср Авг 14, 2013 10:29 am

» настройка воронки продаж
автор EkaterinaGolovina Чт Июн 13, 2013 12:14 pm

Июнь 2018
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930 
КалендарьКалендарь
Баннеры
Яндекс цитирования статистика
Поддержка проекта
41001634550309

Поделиться | 
 

 Работа с WDDX в РНР

Перейти вниз 
АвторСообщение
Admin
Admin


Сообщения : 74
Очки : 71
Дата регистрации : 2010-08-23

СообщениеТема: Работа с WDDX в РНР   Пт Сен 10, 2010 3:41 am

Сегодня мы поговорим об очень важной технологии не только для мира Веб, но и для программирования в целом. А поговорим мы сегодня про универсальность данных и межплатформенный обмен информации. Как вы уже, наверное, поняли, для этого мы будем использовать технологии WDDX.

Но что это такое,- спросите вы.

WDDX был разработан совместными усилиями разработчиков компании Alliery в 1998 году. И призвана она в сей мир для того лишь, чтобы унифицировать информацию, и перевести её в один, доступный всем платформам формат- XML. И сказать честно у них это получилось. Впервые технологию WDDX разработчики Alliery внедрили в свою же платформу, а именно ColdFusion. С течением времени данный формат данных набрал популярности среди разработчиков современного веб'а (хотя не так сильно, как хотелось бы). Данная технология была внедрена в большинство языков для веб-программирования. Так модули для поддержки WDDX доступны для Perl, PHP, Python, ColdFusion и многих других.Сегодня мы поговорим об очень важной технологии не только для мира Веб, но и для программирования в целом. А поговорим мы сегодня про универсальность данных и межплатформенный обмен информации. Как вы уже, наверное, поняли, для этого мы будем использовать технологии WDDX.

Ну, поскольку данная статья посвящена именно WDDX для платформы РНР, то о РНР сейчас и пойдёт речь.

В РНР данная технология интегрирована по умолчанию, и доступна во всех версиях начиная с 3.x.

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

Вот эти этапы:

* Данные
* Сериализация и трансформация в WDDX код
* Сериализирование данные
* Десериализация и трансформация в ассоциативный массив
* Данные

Как видите, с данных всё началось, и данными всё окончилось. Теперь давайте поговорим подробнее о каждом из этапов.

Что ж, допустим у нас есть некоторая переменная произвольного типа, и нам нужно перенести её в WDDX формат, для дальнейших трансформация. Для этого мы производим сериализацию, а то есть перевод данных в WDDX. Однако мы передаём не только данные и название ассоциированной с ними переменной, но и тип ассоциированной переменной, так как зачем нам обыкновенные данные.

В данный момент WDDX поддерживает большинство из доступных на разных платформах типов данных (числа, строки, структуры, массивы).

Что ж, чтобы вам было понятнее, мы сейчас напишем небольшой пример по сериализации данных, для того чтобы показать структуру WDDX данных на примере.
Код:

<?php
$array=array('dasa','fgs','312ew');
$integer=312;
$string='fgasdfasf';
$pack=wddx_packet_start('First WDDX package');
wddx_add_vars($pack,'array','integer','string','float');
$serialized_data=wddx_packet_end($pack);
print htmlspecialchars($serialized_data);
?>

Что ж давайте по порядку. Сначала мы объявляем разного рода переменные, для того чтобы сериализировать их в WDDX формат. После этого мы создаём "стартовый" пакет WDDX.

Кстати, вы можете оставить некоторый произвольный комментарий в качестве параметра функции wddx_packet_start(). Данный текст будет добавлен в специальный XML-тег с индификатором <comment>.

В целом он не носит никакой практической пользы, кроме того, что поясняет предназначение данных в данном WDDX пакете.

После того как мы создали пакет, у нас есть возможность добавлять в него новые данные. Для этого мы вызываем функцию wddx_add_vars. Которая первым аргументом принимает идентификатор пакета, а после n-е количество аргументов строкового типа, которые будут носить название переменных в среде РНР. Эта же функция производит процесс сериализации данных.

Теперь мы просто вызываем функцию wddx_packet_end, которой передаём ресурс пакета, и возвращённый результат присваиваем переменной $serialized_data. Теперь у нас есть готовый WDDX код, который можно отображать.

Для его отображения мы применяем к нему функцию htmlspecialchars, так как браузер не будет корректно отображать "теговые" данные.

Вот, как видите ничего архисложно (как бы сказал дедушка Ленин) в этом нет.

Эти данные теперь можно успешно преобразовывать в данные на другой платформе, и продолжать работу с ними. И вот сразу и появляеться вопрос, как же их преобразовать обратно?

А очень просто, для этого есть процедура десериализации. Десериализация это как раз процесс обратный сериализации, а именно перевод данных на ту или иную платформу, в виде ассоциативного массива, где индексом будет название переменной, а значением её содержимое. Для десериализации в РНР служит функция wddx_deserialize или её прототип wddx_unserialize, дело в том, что функция wddx_unserialize доступна лишь в поздних версиях языка РНР, и потому мы в данной статье будем использовать функцию wddx_deserialize.

Что ж, давайте и это протестируем, для наглядности:
Код:

<?
$array=array('dasa','fgs','312ew');
$integer=312;
$string='fgasdfasf';
$pack=wddx_packet_start('First WDDX package');
wddx_add_vars($pack,'array','integer','string');
$serialized_data=wddx_packet_end($pack);
// Я удалю начальные переменные, чтобы показать вам, что они действительно
// пересоздадуться
unset($array,$integer,$float,$string);
$deserialized_data=wddx_deserialize($serialized_data);
foreach($deserialized_data as $k=>$v){
        $$k=$v;
}
print $integer.';'.$array.';'.$string;
?>

Вот, как видите, всё успешно работает.

Сначала мы удаляем переменные (не забудьте - это не обязательно), а после вызываем функцию wddx_deserialize и передаём ей сериализированые данные в качестве аргумента, и результат её выполнения присваиваем переменной $deserialized_data. Но нам ведь не нужен массив, и поэтому нам нужно перевести его в формат обычных переменных. Для этого мы делаем простейший перебор и вспоминая тонкости РНР присваиваем переменно, именем которой будет значение переменной $k, значение переменной $v, так мы полностью восстанавливаем все переменные.

Как видите, процесс работы с технологией WDDX довольно прост, однако для полного усвоения материала, мы создадим небольшой проект, в соответствии, с которым мы сначала сформируем WDDX-совместимые данные в среде ColdFusion с данные, скажем, биржи акций, далее нашей задачей будет перевести данные в среду РНР, для дальнейшей их обработки.

Что ж, приступим.
Код на PHP
Код:

<html>
<head>
<title>Биржа акций </title>
<meta http-eqiv='Content-Type' Content='text/html; charset=windows-1251'>
<meta name='Author' Content='LoRd aka K.Karpenko'>
</head>
<body>
<?php
if(isset($_POST['add'])){
 $title=$_POST['title'];
 $cost=$_POST['cost'];
 $saldo=$_POST['saldo'];
 $package=wddx_packet_start('Share Information System');
 wddx_add_vars($package,'title','cost','saldo');
 $serialized_data=wddx_packet_end($package);
 $f=fopen('data.xml','w+');
 flock($f,LOCK_EX);
 fwrite($f,$serialized_data);
 flock($f,LOCK_UN);
 fclose($f);
 print "Данные успешно добавлены!";
}
?>
<form action='' method='post'>
Название акций:<input type='text' name='title'><br>
Стоимость1000 акций: <input type='text' name='cost'><br>
Биржевое сальдо: <input type='text' name='saldo'>
<input type='submit' name='add' value='Добавить'>
</form>
</body>
</html>

Принцип вы скорее всего уже поняли. Полученные из формы данные мы сериализируем в формат WDDX, а потом пишем их в некий файл data.xml, для последующей обработки в среде ColdFusion, которая и будет обрабатывать данные файла.

Код на CFML
Код:

<html>
<head>
<title>Стоимость акций на бирже</title>
</head>
<body>
<cflock name='Block' type='ReadOnly' timeout='60'>
        <cffile action='read' file='data.xml' variable='wddx_data'>
</cflock>
<cfwddx action='wddx2cfml' input='#wddx_data#' output='shares_cost'>
Данные по бирже:<br>
<cfoutput>
        #shares_cost#
</cfotput>
</body>
</html>

Вот и всё, на этом мы заканчиваем рассмотрение технологии межплатформенного обмена WDDX. Если у вас появятся вопросы по данной теме или вы столкнётесь с проблемами во время использования технологии, обязательно пишите, и мы вместе решим появившиеся проблемы.
Вернуться к началу Перейти вниз
Посмотреть профиль http://easy-sugarcrm.forum2x2.ru
 
Работа с WDDX в РНР
Вернуться к началу 
Страница 1 из 1
 Похожие темы
-
» Селекционная работа с бойной породой голубей "Агараны"
» Вакансии и работа в Венгрии
» Хочу на ПМЖ , нужен совет, как лучше поступить
» Лёт вольерных голубей и дальнейшая работа с ними
» Работа в ThouVis 4.5

Права доступа к этому форуму:Вы не можете отвечать на сообщения
 :: PHP - статьи, советы-
Перейти: