SiteMaker - Академия сайтостроительства | Разработка сайта
| Вёрстка сайта
| Веб программирование
| Интернет технологии
| Продвижение ресурса
| Инструментарий
карта сервера :: форум :: профайл :: авторам :: о сайте
Гид: SiteMaker.Ru » Веб программирование » PHP » Работа с WDDX в РНР

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


Версия для печати
Привет всем моим читателям!

Сегодня мы поговорим об очень важной технологии не только для мира Веб, но и для программирования в целом. А поговорим мы сегодня про универсальность данных и межплатформенный обмен информации. Как вы уже наверное поняли, для этого мы будем использовать технологию WDDX (Web Distributed Data eXchange - обмен данными, распределенными в сети). Но что это такое, спросите вы.

WDDX был разработан совместными усилиями разработчиков компании Alliery в 1998 году. И призвана она в сей мир лишь для того, чтобы унифицировать информацию, и перевести её в один, доступный всем платформам формат - XML. И, сказать честно, у них это получилось.

Впервые, технологию WDDX разработчики Alliery внедрили в свою же платформу, а именно ColdFusion. С течением времени данный формат данных набрал популярности среди разработчиков современного веба (хотя не так сильно, как хотелось бы). Данная технология была внедрена в большинство языков для веб-программирования. Так, модули для поддержки WDDX доступны для Perl, PHP, Python, ColdFusion и многих других. Но поскольку данная статья посвящена именно WDDX для платформы РНР, то о РНР сейчас и пойдет речь.

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

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

  1. Данные
  2. Сериализация и трансформация в WDDX код
  3. Сериализирование данные
  4. Десериализация и трансформация в ассоциативный массив
  5. Данные

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

Допустим у нас есть некоторая переменная произвольного типа, и нам нужно перенести её в 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. Если у вас появятся вопросы по данной теме или вы столкнётесь с проблемами во время использования технологии, обязательно пишите, и мы вместе решим появившиеся проблемы.

До скорых встреч, Кирилл.


Автор: К.КарпенкоДата публикации: 15.09.2006
Рейтинг статьи: [5.00] рейтинг статьи: 5.00рейтинг статьи: 5.00рейтинг статьи: 5.00рейтинг статьи: 5.00рейтинг статьи: 5.00 [голосов: 3]Кол-во просмотров: 19852
Оценить статью: Установите cookies!

Комментарии читателей:


Сообщение №1388 RUSH 25.09.2006 15:47:56
Очень хорошая статья, не знал этого.

Ваши комментарии:

Ваше имя:*
Ваш E-mail:
Ваш URL:
HTML запрещен
BB Код разрешен


Ваше сообщение:*
* - обязательные поля для заполнения

Внимание!
Перед появлением сообщения на сайте, оно пройдет премодерацию.

Поиск по сайту:

Последние статьи:
Транслитерация и детранслитерация на РНР Транслитерация и детранслитерация на РНР
Ночные мытарства спеца по раскрутке, или постраничный вывод контента в браузер на примере PHP Ночные мытарства спеца по раскрутке, или постраничный вывод контента в браузер на примере PHP
Создаем PHP отладчик своими руками. Часть 2 Создаем PHP отладчик своими руками. Часть 2
Создаем PHP отладчик своими руками. Часть 1 Создаем PHP отладчик своими руками. Часть 1
Введение в регулярные выражения Введение в регулярные выражения
» архив всех статей
Схожая тематика:
:: Perl/CGI
:: ASP
:: JavaScript и VBScript

Академия веб мастеринга и веб дизайна. Разработка сайта, вёрстка сайта, веб программирование, продвижение ресурса, инструментарий и другие темы, посвященные разработке ресурсов в сети Интернет. Форум для веб мастера.


карта сервера :: форум :: профайл :: авторам :: о сайтеНаверх
Rambler's Top100Rambler's Top100 Valid HTML 4.01! © 2000-2017 Все права защищены
страница создана за 0.013 секунд
На главную страницуDeveloped by SiteMaker