Функции wddx


CVI. WDDX Functions

These functions are intended for work with WDDX .

In order to use WDDX, you will need to install the expat library (which comes with Apache 1.3.7 or higher).

After installing expat compile PHP with —enable-wddx .

Версия PHP для Windows-совместимых платформ имеет встроенную поддержку данного расширения. Это означает, что для использования данных функций не требуется загрузка никаких дополнительных расширений.

Данное расширение не определяет никакие директивы конфигурации в php.ini .

Данное расширение не определяет никакие типы ресурсов.

Данное расширение не определяет никакие константы.

All the functions that serialize variables use the first element of an array to determine whether the array is to be serialized into an array or structure. If the first element has string key, then it is serialized into a structure, otherwise, into an array.

Пример 1. Serializing a single value

This example will produce:

PHP to WDDX packet example

Пример 2. Using incremental packets

This example will produce:

Замечание: If you want to serialize non-ASCII characters you have to set the appropriate locale before doing so (see setlocale() ).

CXXXII. WDDX Functions

These functions are intended for work with WDDX .

In order to use WDDX, you will need to install the expat library (which comes with Apache 1.3.7 or higher).

After installing expat compile PHP with —enable-wddx .

Версия PHP для Windows имеет встроенную поддержку данного расширения. Это означает, что для использования данных функций не требуется загрузка никаких дополнительных расширений.

Данное расширение не определяет никакие директивы конфигурации в php.ini .

Данное расширение не определяет никакие типы ресурсов.

Данное расширение не определяет никакие константы.

All the functions that serialize variables use the first element of an array to determine whether the array is to be serialized into an array or structure. If the first element has string key, then it is serialized into a structure, otherwise, into an array.

Пример 1. Serializing a single value with WDDX

This example will produce:

I think it would be helpful for passing data between languages to show a direct translation of the above examples into Perl, using WDDX.pm 1.00 from CPAN. It took me awhile to figure out. To serialize:

The PHP WDDX module encodes all scalars as strings in the XML packet, due to PHP’s loose typing. The current Perl WDDX module takes a different approach, requiring the caller to mark each variable with a type. This is helpful if the reader of the packet is a more strongly typed language that distinguishes between string, int, float, and bool; but it’s more cumbersome to use than the PHP approach. The Perl module is hard to find right now; its home page is:

Since there aren’t any examples of reversing the process, here’s one. If you had the packet produced by the above example (without the htmlentities() call), you could retrieve the values like this:

To make these examples work, you’ll probably want to format the output with a call to htmlentities:

$pi = 3.1415926;
$packet_ );
wddx_add_vars($packet_id, «pi»);

/* Suppose $cities came from database */
$cities = array(«Austin», «Novato», «Seattle»);
wddx_add_vars($packet_id, «cities»);

$packet = wddx_packet_end($packet_id);
print htmlentities($packet);

CLXV. WDDX Functions

These functions are intended for work with WDDX .

In order to use WDDX, you will need to install the expat library (which comes with Apache 1.3.7 or higher).

After installing expat compile PHP with —enable-wddx .

The windows version of PHP has built in support for this extension. You do not need to load any additional extension in order to use these functions.

This extension has no configuration directives defined in php.ini .

This extension has no resource types defined.

This extension has no constants defined.

All the functions that serialize variables use the first element of an array to determine whether the array is to be serialized into an array or structure. If the first element has string key, then it is serialized into a structure, otherwise, into an array.

Example 1. Serializing a single value with WDDX

This example will produce:

PHP to WDDX packet example

Example 2. Using incremental packets with WDDX

This example will produce:

Note: If you want to serialize non-ASCII characters you have to convert your data to UTF-8 first (see utf8_encode() and iconv() ).

Функции wddx

WDDX — (Web Distributed Data eXchange) is a programming language , platform and transport neutral data interchange mechanism to pass data between different environments and different computers. It supports simple data types such as number, string,… … Wikipedia

WDDX — (Web Distributed Data eXchange) ist ein plattform und transportneutraler programmiersprachlicher Mechanismus für den Austausch von Daten zwischen unterschiedlichen System Umgebungen und Computern. Das Format unterstützt einfache Datentypen wie… … Deutsch Wikipedia

WDDX — (Web Distributed Data eXchange) es un estándar XML para el intercambio de información estructurada entre distintos lenguajes de programación. Usando WDDX es posible convertir un vector en PHP en una estructura WDDX serializada y luego des… … Wikipedia Español

WDDX — Web Distributed Data eXchange Web Distributed Data eXchange, sigle WDDX, est un format d échange de données entre applications. Il est basé sur XML. Il a été créé par Allaire pour son environnement ColdFusion. Des bibliothèques permettent de l… … Wikipédia en Français

WDDX — Web Distributed Data Exchange (Computing » General) … Abbreviations dictionary

WDDX — ● ►en sg. m. ►XML Web Distributed Data Exchange. Technique basée sur XML, mise au point par la société Allaire, afin de permettre les échanges de données entre les différents langage de programmation liés au web comme ASP, Java, Javascript, Perl … Dictionnaire d’informatique francophone

Web Distributed Data eXchange — Web Distributed Data eXchange, sigle WDDX, est un format d échange de données entre applications. Il est basé sur XML. Il a été créé par Allaire pour son environnement ColdFusion. Des bibliothèques permettent de l utiliser avec de nombreux… … Wikipédia en Français

Adobe ColdFusion — ColdFusion ist eine für Web basierte Datenbankanwendungen konzipierte M >Deutsch Wikipedia

CFML — ColdFusion ist eine für Web basierte Datenbankanwendungen konzipierte M >Deutsch Wikipedia

ColdFusion Language — ColdFusion ist eine für Web basierte Datenbankanwendungen konzipierte M >Deutsch Wikipedia

Функции wddx

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

cffunction

Description

Defines a function that you can call in CFML. Required to define ColdFusion component methods.

History

ColdFusion (2020 release): It is no longer necessary to set the access attribute to «remote» in case of a REST-based function.

ColdFusion 10: Added the attributes- restPath, httpMethod, produces, and consumes.

  • Added returnformat , secureJSON, and verifyClient attributes
  • Added component as a valid value for the ReturnType attribute.
    ColdFusion MX 7: Added the description attribute, and added the XML value to the returntype attribute.ColdFusion MX: Added this tag.

Category

See also

cfargument, cfcomponent, cfinterface, cfinvoke, cfinvokeargument, cfobject, cfproperty, cfreturn, SerializeJSON

Syntax

Attributes

A string; a component method that is used in the cfcomponent tag.

Supplies a short text description of the function.

Meaningful only for CFC method parameters. A value to be displayed in parentheses following the function name when using introspection to show information about the CFC.

Meaningful only for CFC method parameters. Text to be displayed when using introspection to show information about the CFC. The hint attribute value follows the syntax line in the function description.

Function body is processed as standard CFML

Specifies under which conditions the function can generate HTML output.
The following values are valid:

· yes: the entire function body is processed as if it were in a cfoutput tag. Variables names surrounded by number signs (#) are automatically replaced with their values.

· no: the function is processed as if it were within a cfsilent tag.
If you do not specify this attribute, the function body is processed as standard CFML. Any variables must be in cfoutput tags.

Return as WDDX or XML; see description.

The format in which to return values to a remote caller. This attribute has no effect on values returned to a local caller.
The following values are valid:

· json : serialize the return value into JSON format before returning it remotely.

· wddx : serialize the return value into WDDX format before returning it remotely.

· plain: ensure that the return value is a type that ColdFusion can convert directly to a string, and return the string value without serialization. Val >returntype attribute, its value must be any, boolean, date, guid , numeric, string, uuid , variablename , or XML; otherwise, ColdFusion generates an error.
By default, ColdFusion serializes all return types (including simple return types), except XML, into WDDX format, and returns XML data as XML text.
You can also use returnformat as an HTTP request parameter when calling a remote CFC function. This parameter has the same effect as the returnformat attribute and overr >returnformat attribute value specified in the cffunction tag.

Required for a web service; Optional, otherwise.

String; a type name; data type of the function return value:

· component: the return value must be a ColdFusion component.

· guid : the argument must be a UU >xxxxxxxx — xxxx — xxxx — xxxx — xxxxxxxxxxxx where each_ x_ is a character that represents a hexadecimal number (0-9A-F).

· uuid : the argument must be a ColdFusion UU >xxxxxxxx — xxxx — xxxx — xxxxxxxxxxxxxxxx where each_ x_ is a character that represents a hexadecimal number (0-9A-F).

· variableName: a string formatted according to ColdFusion variable naming conventions.

· void: does not return a value.

· xml : allows web service functions to return CFML XML objects and XML strings.

· A component name: If the returntype attribute value is not one of the preceding items, ColdFusion treats it as the name of a ColdFusion component. When the function executes, it generates an error if the value that is returned is not a CFC with the specified name.
Note: If a function does not return a value and the returnType value is string , ColdFusion generates an error; ColdFusion does not generate an error for other types.

A comma-delimited list of ColdFusion security roles that can invoke the method. Only users who are logged in with the specified roles can execute the function. If this attribute is omitted, all users can invoke the method.

A Boolean value that specifies whether to add a security prefix in front of any value that the function returns in JSON-format in response to a remote call. The default value is the value of any This.secureJSON variable in the Application.cfc file or the secureJSON attribute of the cfapplication tag, or if there is no<> application setting, the Prefix Serialized JSON setting in the Administrator Server Settings > Settings page, which defaults to false.
For more information see Improving security in Ajax programming rules and techniques in the Developing ColdFusion Applications.

A Boolean value that specifies whether to require remote function calls to include an encrypted security token. For use with ColdFusion AJAX applications only. For more information see Improving security in Ajax programming rules and techniques in the Developing ColdFusion Applications.

Specify to use a sub- resource path for the CFC.
The path is case-sensitive. Also, it is preferable to avoid special characters when you specify the path. You can include regular expressions in the path.
For details of the expressions that you can specify, see the attribute restPath in cfcomponent .

The HTTP method to use, must be one of the following:

· GET: Requests information from the server. Any data that the server requires to identify the requested information must be in the URL or in <>tag.

· POST: Sends information to the server for processing. Requires one or more cfhttpparam tags. Often used for submitting form-like data.


· PUT: Requests the server to store the message body at the specified URL. Use this method to send files to the server.

· DELETE: Requests the server to delete the specified URL.

· HEAD: >message body is not sent in the response.

· OPTIONS: A request for information about the communication options available for the server or the specified URL. This method enables the ColdFusion application to determine the options and requirements associated with a URL, or the capabilities of a server, without requesting any additional activity by the server. If you have not specified OPTIONS, then ColdFusion sends a response.
Overr >component level.

Comma-separated list of acceptable MIME types. Used to specify the MIME media type of representation a resource can produce, for example, <>If a resource can produce more than one MIME media type, the function chosen corresponds to the most acceptable media type as declared by the client.
If no value is specified, / is taken by default, which means, all MIME types are consumed. Overrides the value that you specify at the component level.

Note
If MIME type is a wildcard, the results include any value.
For example, if you a make a http call with produces as ‘*/ xml ‘ and follow it up with a second http call with produces as ‘*/json’, the results in the second http call might include the first call result as well.

Comma-separated list of acceptable MIME types, for example consumes=»text/plain,text/ html «.Used to specify which MIME media types of representation a resource can accept, or consume, from the client. This attribute overrides the same attribute at the component level.
If no value is specified, / is taken by default, which means, all MIME types are consumed. Adobe recommends that you avo >xml and consumes as text/and in function 2, produces as text/ and consumes as text/ xml . Here, both the functions are val >xml and consumes as text/ xml .

Usage

The cffunction tag can define a function that you call in the same manner as a ColdFusion built-in function. To define a ColdFusion component (CFC) method, use a cffunction tag. The following example shows cffunction tag attributes for a simple CFC method that returns a ColdFusion Query object.

For detailed information on using the cffunction tag for ColdFusion components, see Building and Using ColdFusion Components in the Developing ColdFusion Applications.
If you specify returnformat=»json» and the function returns a query, ColdFusion serializes the query into a JSON Object with two entries, and array of column names, and an array of column data arrays. For more information see SerializeJSON.
If you specify a roles attribute, the function executes only if a user is logged in and belongs to one of the specified roles.
If you specify variableName for the returnType attribute, the function must return a string that is in ColdFusion variable name format; that is, the function must return a string that starts with a letter, underscore, or Unicode currency symbol, and consist of letters, numbers, and underscores (_), periods, and Unicode currency symbols, only. ColdFusion does not check whether the value corresponds to an existing ColdFusion variable.

Функции wddx

В предыдущем шаге я в числе прочего описал функцию CURRENT(), возвращающую значение текущего элемента маасива, и совсем забыл отметить, что функция есть POS() — синоним для CURRENT(). Просто алиас.

Теперь продолжим по массивам. Функция EXTRACT() создает переменные на основе ассоциативного массива. Функция имеет три параметра: исходный массив, тип операции (необязателен), строка-префикс (необязательный; для типов операций EXTR_PREFIX_SAME и EXTR_PREFIX_ALL) — для создания переменных с строкой-префиксом в названии, не попадающих под правило, определяемое типом операции.

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

Как Вы, наверное, заметили, тип операции задается константой (допустимые значения от 0 до 3). Перед выполнением EXTRACT()-а проинициализирована одна из создаваемых функцией переменных — $size. Значение 2-го параметра EXTR_OVERVIEW (значение по умолчанию) заставляет функцию перезаписывать значение этой переменной новым значением (из массива).

EXTR_SKIP не «портит» значение $size.

EXTR_PREFIX_SAME также не изменяет $size, но создает одноименную переменную с префиксом, передаваемым в третьем параметре (в этом случае третий параметр обязателен — умолчания нет!), т.е. в данном примере переменную wddx_size.

И наконец, EXTR_PREFIX_ALL, не трогая $size, создает на каждый ключ массива переменную с префиксом.

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

То же касается и случая, когда:

т.к. в имени переменной не может быть пробелов — ключ для функции неверен.

Мануал предлагает использовать эту функцию для обработки массивов с результатами работы функции группы WDDX_xxxx (от сюда и строка префикса в примере).

К WDDX-группе мы перейдем ближе к финалу рассмотрения возможностей PHP, когда вплотную займемся работой с XML. По описанию на сайте разработчиков WDDX-концепция основана на XML-технологии (DTD) и предназначена для сериализации данных, под которой авторы понимают сохранение и передачу данных между разными скриптовыми технологиями на стороне сервера (например, PHP ;). Необходимоть такого решения обуславливается различиями внутреннего формата данных в разных скриптовых решениях (ColdFusion, Perl, ASP, Java, JavaScript, PHP и пр.).
(Надеюсь, я правильно понял описание. )

Функция KEY() возвращает текущее значение ключа массива (напомню, когда речь идет о текущем значении, имеется в виду внутренний указатель на элемент массива). В качестве параметра передается массив. Если массив неассоциативный, то ключем является индекс.

Функция RANGE() создает массив из диапазона чисел:

Функция SHUFFLE() случайным образом «перемешивает» содержимое массива (правда, для полноценной «случайности» надо проинициализировать псевдослучайную последовательность функцией SRAND(), дав ей на вход уникальное число, например, от функции TIME()).

Вот пример (взят из мануала).

Массив может быть как с числовыми индексами, так и ассоциативный. Индексы остаются по-прежнему в порядке возрастания — перетасовывается только содержимое.

Функции COUNT() и SIZEOF() возвращают количество элементов массива. Если в качестве параметра указана обычная переменная, то обе вернут «1». Если переменная еще не определена, то возвращаемое значение будет «0» (кстати, для подавления Warning-а перед функцией можно поставить знак «@» — подавление сообщения об ошибки или предупреждения). В чем разница между этими функциями, я так и не выяснил.

CV. WDDX Functions

These functions are intended for work with WDDX .

In order to use WDDX, you will need to install the expat library (which comes with Apache 1.3.7 or higher).

After installing expat compile PHP with —enable-wddx .

The windows version of PHP has built in support for this extension. You do not need to load any additional extension in order to use these functions.

This extension has no configuration directives defined in php.ini .

This extension has no resource types defined.

This extension has no constants defined.

All the functions that serialize variables use the first element of an array to determine whether the array is to be serialized into an array or structure. If the first element has string key, then it is serialized into a structure, otherwise, into an array.

The client security context from which the method can be invoked. The following values are valid:
  • private: available only to the component that declares the method and any components that extend the component in which it is defined.
  • package: available only to the component that declares the method, components that extend the component, or any other components in the package. Methods are available to the CFC pages in the same package.
  • public: available to a locally executing page or component method.
  • remote: available to a locally or remotely executing page or component method, or a remote client through a URL, Flash, or a web service. To publish the function as a web service, this option is required.
restpath Optional String Specify to use a sub- resource path for the CFC. You can also include regular expressions in the path.

Example 1. Serializing a single value

This example will produce:

PHP to WDDX packet example

Example 2. Using incremental packets

This example will produce:

Note: If you want to serialize non-ASCII characters you have to set the appropriate locale before doing so (see setlocale() ).

cffunction

Description

Defines a function that you can call in CFML. Required to define ColdFusion component methods.

History

ColdFusion (2020 release): It is no longer necessary to set the access attribute to «remote» in case of a REST-based function.

ColdFusion 10: Added the attributes- restPath, httpMethod, produces, and consumes.

  • Added returnformat , secureJSON, and verifyClient attributes
  • Added component as a valid value for the ReturnType attribute.
    ColdFusion MX 7: Added the description attribute, and added the XML value to the returntype attribute.ColdFusion MX: Added this tag.

Category

See also

cfargument, cfcomponent, cfinterface, cfinvoke, cfinvokeargument, cfobject, cfproperty, cfreturn, SerializeJSON

Syntax

Attributes

A string; a component method that is used in the cfcomponent tag.

Supplies a short text description of the function.

Meaningful only for CFC method parameters. A value to be displayed in parentheses following the function name when using introspection to show information about the CFC.

Meaningful only for CFC method parameters. Text to be displayed when using introspection to show information about the CFC. The hint attribute value follows the syntax line in the function description.

Function body is processed as standard CFML

Specifies under which conditions the function can generate HTML output.
The following values are valid:

· yes: the entire function body is processed as if it were in a cfoutput tag. Variables names surrounded by number signs (#) are automatically replaced with their values.


· no: the function is processed as if it were within a cfsilent tag.
If you do not specify this attribute, the function body is processed as standard CFML. Any variables must be in cfoutput tags.

Return as WDDX or XML; see description.

The format in which to return values to a remote caller. This attribute has no effect on values returned to a local caller.
The following values are valid:

· json : serialize the return value into JSON format before returning it remotely.

· wddx : serialize the return value into WDDX format before returning it remotely.

· plain: ensure that the return value is a type that ColdFusion can convert directly to a string, and return the string value without serialization. Val >returntype attribute, its value must be any, boolean, date, guid , numeric, string, uuid , variablename , or XML; otherwise, ColdFusion generates an error.
By default, ColdFusion serializes all return types (including simple return types), except XML, into WDDX format, and returns XML data as XML text.
You can also use returnformat as an HTTP request parameter when calling a remote CFC function. This parameter has the same effect as the returnformat attribute and overr >returnformat attribute value specified in the cffunction tag.

Required for a web service; Optional, otherwise.

String; a type name; data type of the function return value:

· component: the return value must be a ColdFusion component.

· guid : the argument must be a UU >xxxxxxxx — xxxx — xxxx — xxxx — xxxxxxxxxxxx where each_ x_ is a character that represents a hexadecimal number (0-9A-F).

· uuid : the argument must be a ColdFusion UU >xxxxxxxx — xxxx — xxxx — xxxxxxxxxxxxxxxx where each_ x_ is a character that represents a hexadecimal number (0-9A-F).

· variableName: a string formatted according to ColdFusion variable naming conventions.

· void: does not return a value.

· xml : allows web service functions to return CFML XML objects and XML strings.

· A component name: If the returntype attribute value is not one of the preceding items, ColdFusion treats it as the name of a ColdFusion component. When the function executes, it generates an error if the value that is returned is not a CFC with the specified name.
Note: If a function does not return a value and the returnType value is string , ColdFusion generates an error; ColdFusion does not generate an error for other types.

A comma-delimited list of ColdFusion security roles that can invoke the method. Only users who are logged in with the specified roles can execute the function. If this attribute is omitted, all users can invoke the method.

A Boolean value that specifies whether to add a security prefix in front of any value that the function returns in JSON-format in response to a remote call. The default value is the value of any This.secureJSON variable in the Application.cfc file or the secureJSON attribute of the cfapplication tag, or if there is no<> application setting, the Prefix Serialized JSON setting in the Administrator Server Settings > Settings page, which defaults to false.
For more information see Improving security in Ajax programming rules and techniques in the Developing ColdFusion Applications.

A Boolean value that specifies whether to require remote function calls to include an encrypted security token. For use with ColdFusion AJAX applications only. For more information see Improving security in Ajax programming rules and techniques in the Developing ColdFusion Applications.

Specify to use a sub- resource path for the CFC.
The path is case-sensitive. Also, it is preferable to avoid special characters when you specify the path. You can include regular expressions in the path.
For details of the expressions that you can specify, see the attribute restPath in cfcomponent .

The HTTP method to use, must be one of the following:

· GET: Requests information from the server. Any data that the server requires to identify the requested information must be in the URL or in <>tag.

· POST: Sends information to the server for processing. Requires one or more cfhttpparam tags. Often used for submitting form-like data.

· PUT: Requests the server to store the message body at the specified URL. Use this method to send files to the server.

· DELETE: Requests the server to delete the specified URL.

· HEAD: >message body is not sent in the response.

· OPTIONS: A request for information about the communication options available for the server or the specified URL. This method enables the ColdFusion application to determine the options and requirements associated with a URL, or the capabilities of a server, without requesting any additional activity by the server. If you have not specified OPTIONS, then ColdFusion sends a response.
Overr >component level.

Comma-separated list of acceptable MIME types. Used to specify the MIME media type of representation a resource can produce, for example, <>If a resource can produce more than one MIME media type, the function chosen corresponds to the most acceptable media type as declared by the client.
If no value is specified, / is taken by default, which means, all MIME types are consumed. Overrides the value that you specify at the component level.

Note
If MIME type is a wildcard, the results include any value.
For example, if you a make a http call with produces as ‘*/ xml ‘ and follow it up with a second http call with produces as ‘*/json’, the results in the second http call might include the first call result as well.

Comma-separated list of acceptable MIME types, for example consumes=»text/plain,text/ html «.Used to specify which MIME media types of representation a resource can accept, or consume, from the client. This attribute overrides the same attribute at the component level.
If no value is specified, / is taken by default, which means, all MIME types are consumed. Adobe recommends that you avo >xml and consumes as text/and in function 2, produces as text/ and consumes as text/ xml . Here, both the functions are val >xml and consumes as text/ xml .

Usage

The cffunction tag can define a function that you call in the same manner as a ColdFusion built-in function. To define a ColdFusion component (CFC) method, use a cffunction tag. The following example shows cffunction tag attributes for a simple CFC method that returns a ColdFusion Query object.

For detailed information on using the cffunction tag for ColdFusion components, see Building and Using ColdFusion Components in the Developing ColdFusion Applications.
If you specify returnformat=»json» and the function returns a query, ColdFusion serializes the query into a JSON Object with two entries, and array of column names, and an array of column data arrays. For more information see SerializeJSON.
If you specify a roles attribute, the function executes only if a user is logged in and belongs to one of the specified roles.
If you specify variableName for the returnType attribute, the function must return a string that is in ColdFusion variable name format; that is, the function must return a string that starts with a letter, underscore, or Unicode currency symbol, and consist of letters, numbers, and underscores (_), periods, and Unicode currency symbols, only. ColdFusion does not check whether the value corresponds to an existing ColdFusion variable.

Обмен данными между приложениями с помощью XML+WDDX в PHP4

В статье рассматривается методика организации кроссплатформенного межзадачного обмена данными на основе XML с применением WDDX-пакетов. Приведенные примеры демонстрируют возможность как формирования входных документов, так и загрузки массивов в формате XML+WDDX в PHP-приложение.
Одна из весьма серьезных проблем, возникающих при Web-программировании заключается в необходимости стыковки между расличными задачами (программами), объединяемыми в Internet/Intranet-систему. Например, при разработке сложных систем, которые ведутся в несколько этапов различными коммандами разработчиков, может возникнуть ситуация, при которой часть модулей реализована на Perl, а часть — на PHP.
Достаточно удобное решение возникающих в такой ситуации многочисленных проблем, которое было предложено фирмой Allaire, разработчиком известной инструментальной системы Gold Fusion, основано на формате XML. А точнее на одном из его расширений.
WDDX (Web Distributed Data eXchange — обмен данными, распределенными в сети), является производным от XML и предоставляет достаточно удобный механизм, позволяющий конвертировать структуры данных из Perl, Javascript или PHP в некоторый унифицированный формат на базе XML или обратно. (В отличие от пакета Gold Fusion, WDDX выпущен как проект с открытым кодом. Вы можете загрузить WDDX SDK с сервера http://www.openwddx.org. А при необходимости обеспечить работу с WDDX из программы на Perl, воспользуйтесь модулем WDDX.pm с CPAN.)

1. Первое знакомство с WDDX

Главное преимущество WDDX заключается в прозрачной для программиста поддержке не только разнообразных «элементарных» типов данных: строк, чисел, логических значений, даты и времени, но и составных — массивов, структур и записей. Кроме того, WDDX позволяет представлять и двоичные данные, например, графические изображения. Естественно, поддерживается как вывод, так и ввод данных.
По умолчанию, поддержка WDDX в PHP отключена, чтобы ее активизировать и иметь возможность проверить работоспособность примеров этой статье, вы должны перекомпилировать PHP-машину с конфигурационным ключом —enable-wddx.
После перезагрузки WWW-сервера с поддержкой WDDX мы можем приступить к изучению возможностей этого протокола. Вначале попробуем сериализировать (преобразовать в формат, пригодный для обмена) одно отдельное значение. Хитрость WDDX, которая находит отражение в терминологии, состоит в том, что исходные данные преобразуются в так называемые «пакеты данных», которые инкапсулируют имя переменной, её тип и значение.
Поэтому приведенная ниже программа:

приведет к формированию пакета (текстовой строки):

The client security context from which the method can be invoked. The following values are valid:
  • private: available only to the component that declares the method and any components that extend the component in which it is defined.
  • package: available only to the component that declares the method, components that extend the component, or any other components in the package. Methods are available to the CFC pages in the same package.
  • public: available to a locally executing page or component method.
  • remote: available to a locally or remotely executing page or component method, or a remote client through a URL, Flash, or a web service. To publish the function as a web service, this option is required.
restpath Optional String Specify to use a sub- resource path for the CFC. You can also include regular expressions in the path.

Преобразование РНР в WDDX

Итак, что мы видим. Вначале в поток помещен тэг, представляющий собой идентификатор версии протокола WDDX. Версия 1.0 является единственной существующей, поэтому просто принимайте эту информацию к сведению. Затем следует комментарий, в котором содержится либо описание переменной, либо иногда помещается имя переменной, в которой хранились данные в исходной программе. А уже затем следует тэг (в данном случае ), который определяет тип переменной и её значение.
Но использовать WDDX для хранения отднльных, изолированных переменных на практике не слишком удобно. Поэтому в WDDX предусмотрен механизм «накопления» переменных, подлежащих сериализации, с последующим помещением их «в один флакон». Вот как это выглядит на практике:

В результате выполнения этой программы вы получите следующий пакет WDDX:

3.1415926

Austin
Novato
Seattle

2. Функции WDDX-генератора и анализатора

Теперь давайте приступим к подобному обсуждению функций WDDX.

2.1 Сериализация переменной — wddx_serialize_value

string wddx_serialize_value (mixed var [, string comment])

Функция wddx_serialize_value() используется для создания WDDX пакета, содержащего одно единственое значение. Это значение извлекается из переменной var, а при наличии необязательного комментария comment, он добавляется в заголовок пакета. Результатом работы функции является сформированный WDDX-пакет.

2.2 Сериализация множества — wddx_serialize_vars

string wddx_serialize_vars (mixed var_name [, mixed . ])

Функция wddx_serialize_vars() предназначена для создания пакета WDDX, в котором содержится структура с сериализованным представлением множества переменных, переданный в качестве аргументов функции.
Функция принимает переменное количество аргументов, каждый из которых может представлять собой либо строку, значение которойявляется именем переменной, подлежащей помещению в пакет, либо массив, элементы которого являются именами переменных или массивов, которые содержат такие имена и т.д. В общем рекурсивные возможности функции, на которые несомненное влияние оказал Лисп, предоставляют широкий простор для деятельности.
Вот так эта функция может использоваться в прикладной программе:

В результате выполнения этого примера будет сформирован следующий пакет WDDX:

1

5.5

blue
orange
violet

colors

2.3 Создание нового пакета — wddx_packet_start

int wddx_packet_start ([string comment])

Функция wddx_packet_start() используется для создания нового пакета WDDX, предназначенного для накопления в нем нескольких переменных. Функция может принимать дополнительный аргумент comment, в который помещается необязательный комментарий (описание пакета). По завершению работы функция возвращает целочисленный идентификатор пакета, который используется при работе функций заполнения. Определение всех необходимых структур данных, необходимых для хранения помещаемых в пакет переменных, будет выполняться автоматически.

2.4 Закрытие пакета — wddx_packet_end

string wddx_packet_end (int packet_id)

Функция wddx_packet_end() завершает обработку пакета WDDX, идентифицируемого с помощью packet_id и возвращает строку, содержащую сформированный пакет.

2.5 Добавление данных в пакет — wddx_add_vars

wddx_add_vars (int packet_id, mixed name_var [, mixed . ])

Функция wddx_add_vars() используется для сериализации переданных ей аргументов с помещением в открытый ранее пакет с идентификатором id. Переменные, которые подлежат сериализации, определяются так же, как и в функции wddx_serialize_vars().

2.6 Восстановление данных — wddx_deserialize

mixed wddx_deserialize (string packet)

Функция wddx_deserialize() принимает в качестве аргумента строку, содержащую пакет WDDX, анализирует ее и восстанавливает переменные, содержащиеся в ней. Возвращаемый результат может представлять собой строку, число или массив. Сложные структуры данных при восстановлении помещаются в ассоциативные массивы.

3. Генерация системного журнала в XML+WDDX

Теперь, в качестве иллюстрации, рассмотрим практический пример работы подсистемы обработки ошибок в РНР (Листинг 1). Мы создадим собственную функцию обработчика ошибок, которая будет генерировать журнал, представленный в модном XML-формате, а также отправлять письмо администратору узла при обнаружении критических ошибок. Поскольку нам придется иметь дело с массивами, для их помещения в журнал мы воспользуемся WDDX.
Возможно, пример покажется вам достаточно длинным, но, поверьте, дело того стоит.
Состоит он из двух основных частей — формирования журнала и его последующего просмотра. Поскольку пользователь nobody, от имени которого обычно запускаются PHP-программы на сервере Apache, не имеет особых прав на работу с файловой системой, для размещения системного журнала мы будем использовать каталог tmp. В некоторых версиях Linux доступ на запись в этот каталог «посторонним» пользователям закрыт. Поэтому вам может потребоваться изменить права доступа к нему с помощью команды (такая комманда — это грубейшее нарушение безопасности и не рекомендуется проводить на узлах, подключенных с сети Интернет)
chmod a+w /tmp
Обратите внимание на команду unlink в самом начале программы. Дело в том, что XML-документ может содержать только один элемент верхнего уровня, а команда error_log осуществляет extit<дописывание в конец существующего файла>. Поэтому, если вы не будете создавать системный журнал заново, то выполнить программу больше одного раза просто не сможете — анализатор XML аварийно завершит работу при обнаружении второго документа верхнего уровня.
После этого мы создаем новый файл журнала и помещаем в него открывающий тег . Затем устанавливаем свой собственный обработчик ошибочных ситуаций, в задачу которого входит сформировать запись в XML-формате, которая будет записана в журнал.
До тех пор, пока структура записи определена достаточно жестко:

Илон Маск рекомендует:  Что такое код count
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL