Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Расчет обратной матрицы на Delphi + Пояснительная записка
Моделирование работы узла коммутации сообщений на GPSS + Пояснительная з...
Моделирование работы крупного аэропорта на GPSS + Пояснительная записка

Работа с WDDX в РНР
Автор: Кирилл Карпенко
21 сентября 2006 года

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

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

До скорых встреч, Кирилл.
Опубликовал Kest November 06 2008 16:53:09 · 0 Комментариев · 8016 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Microsoft Press -...
Книга по Delphi (...
Игра PackMan
Нестандартные при...
Создание лабиринт...
Усложнённый кальк...
Srinilist
Создание оригинал...
SUIPack
PDPcheck
Основы программир...
Counter [Исходник...
Domen Name IP
39 статьи по Delphi
Abbrevia
Андрей Боровский....
PHP 5 на примерах
Программирование ...
TsHintManager
Пишем программы и...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97839
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14194
Borland Delphi ... 10293
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
АБСТРАКТНЫЕ ТИПЫ Д...
Перестройка образо...
«Это не моя ошибка!»
Членам групп не да...
Умеете ли вы делат...
5.1. От псевдокода...
Программирование л...
Дан массив A(5,5)....
Программа HTML-Kit
Пример 1. Формулир...
Функции обработки ...
Виды роботов Яндекса
Играть автоматы Эл...
Выработка решенияС...
Списки с потоками
ГЛАВА 8. ОТЛАДКА ...
Внешнее определени...
Понятие "область п...
Разработка микропр...
Совместимость язык...
Кнопка с рисунком
Читателям первого ...
Статические элементы
Синтаксис
Документ FacebookWork
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?