PHP: WDDX Functions - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

wddx_add_vars w32api_set_call_method

Last updated: Sat, 27 Jan 2007

view this page in

# CLXX. 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

`<?php echo wddx_serialize_value("PHP to WDDX packet example", "PHP packet"); ?>`

This example will produce:

    <wddxPacket version='1.0'><header comment='PHP packet'/><data>
    <string>PHP to WDDX packet example</string></data></wddxPacket>

Пример 2. Using incremental packets with WDDX

`<?php
$pi = 3.1415926;
$packet_id = wddx_packet_start("PHP");
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);
echo $packet;
?>`

This example will produce:

    <wddxPacket version='1.0'><header comment='PHP'/><data><struct>
    <var name='pi'><number>3.1415926</number></var><var name='cities'>
    <array length='3'><string>Austin</string><string>Novato</string>
    <string>Seattle</string></array></var></struct></data></wddxPacket>

> Замечание: If you want to serialize non-ASCII characters you have to convert your data to UTF-8 first (see utf8_encode() and iconv()).

add a note User Contributed Notes
WDDX Functions
Jimmy Wimenta
15-Jul-2004 05:53
`PHP's WDDX is useful only for exchanging data between PHP applications, but definetly not for exchanging data between different languages (which actually defeats the purpose of WDDX).
For example:
$hash1 = array ("2" => "Two", "4" => "Four", "5" => "Five");
$hash2 = array ("0" => "Zero", "1" => "One", "2" => "Two");
$hash1 will be serialized as hash, but
$hash2 will be serialized as array/list, because the key happen to be a sequence starting from 0.
Unless the library provide a way for users to specify the type, it can never be used for cross-platform data exchange.`
Q1tum at hotmail dot com
21-Nov-2003 05:08
`To insert arrays into a wddx variable here is a fine way to do it:
<?php
$sql = 'SELECT * FROM example';
$query = mysql_query($sql, $db) or die(mysql_error());
while($result = mysql_fetch_array($query)) {
$id[] = $result[ 'id'];
$name[] = $result['name'];
$description[] = $result[$prefix . 'description'];
}
mysql_free_result($query);
wddx_add_vars($packet_id, "id");
wddx_add_vars($packet_id, "name");
wddx_add_vars($packet_id, "description");
$wddxSerializeValue = wddx_packet_end($packet_id);
?>`
11-Sep-2003 07:29
`wddx isn't 100% perl compatible .. I have an wddx file infront of me and it only works with php so better don't use it`
pointsystems.com, sbarnum
03-Sep-2002 10:11
`a good FAQ on WDDX can be found here:
http://www.macromedia.com/v1/handlers/index.cfm?id=5622&method=full`
bradburn at kiwi dot de
30-Jul-2002 07:02
`With ref to the above comment about typing, I have found that -- oddly enough -- PHP's WDDX supports the following WDDX types: null, boolean (true/false), number and string, *but* not date-time.
as an example, use the following values in an array that you then serialize:
$number = 5,
$null = NULL,
$bool = true,
$string = 'this is a string'.
they will all serialize correctly, e.g. the third entry comes out as:
<var name='bool'><boolean value='true'/></var>
i have tried with the 'official' format for WDDX 'datetime', e.g. '1998-9-15T09:05:32+4:0' (from the DTD @ http://www.openwddx.org/downloads/dtd/wddx_dtd_10.txt) but have only succeeded in getting this encoded as a 'string' type.
if anyone else has any more information on this, it would be welcome. i would like to store the variables in 'appropriate' fields in a database, and the fact that only datetime is not supported is slightly irritating -- otherwise it would be a very useful function.`
philip at thepr()jects dot ()rg
17-Nov-2000 01:32
`Tutorial here :
XML and PHP. Part 1: Using the WDDX functions
http://www.phpbuilder.net/columns/jesus20000402.php3`
djm at web dot us dot uu dot net
02-Mar-2000 03:50
`Here's a rewrite of the deserializing Perl code that uses variable names consistently with the serializing example. Sorry for any confusion....
<PRE>
#!/usr/bin/perl
use WDDX;
open(FP, "<cities.wddx");
undef $/; # Slurp the whole file.
$packet = <FP>;
close(FP);
$wddx = new WDDX;
$packet_id = $wddx->deserialize($packet);
$value = $packet_id->as_hashref();
print "pi is:<br>" . $value->{"pi"} . "<p>\n";
print "cities is:<br>\n";
$key = 0;
foreach $val (@{$value->{"cities"}}) {
print "$key => $val<br>\n";
$key++;
}
</PRE>`
djm at web dot us dot uu dot net
02-Mar-2000 03:36
`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:
<PRE>
#!/usr/bin/perl
use WDDX;
$wddx = new WDDX;
$packet_id = $wddx->struct({});
$pi = 3.1415926;
$packet_id->set("pi" => $wddx->number($pi));
# Suppose @cities came from database
@cities = ("Austin", "Novato", "Seattle");
$packet_id->set("cities" => $wddx->array([map $wddx->string($_), @cities]));
$packet = $wddx->serialize($packet_id);
open(FP, ">cities.wddx");
print FP $packet;
close(FP);
</PRE>
<P>
To deserialize:
<PRE>
#!/usr/bin/perl
use WDDX;
open(FP, "<cities.wddx");
undef $/; # Slurp the whole file.
$packet = <FP>;
close(FP);
$packet_id = new WDDX;
$wddx_obj = $packet_id->deserialize($packet);
$value = $wddx_obj->as_hashref();
print "pi is:<br>" . $value->{"pi"} . "<p>\n";
print "cities is:<br>\n";
$key = 0;
foreach $val (@{$value->{"cities"}}) {
print "$key => $val<br>\n";
$key++;
}
</PRE>`
djm at web dot us dot uu dot net
18-Oct-1999 08:45
`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:
<pre>
$value = wddx_deserialize($packet);
print "pi is:<br>" . $value["pi"] . "<p>\n";
print "cities is:<br>\n";
while (list($key, $val) = each($value["cities"])) {
print "$key => $val<br>\n";
}
</pre>
which outputs:
<pre>
pi is:
3.1415926
cities is:
0 => Austin
1 => Novato
2 => Seattle
</pre>`
add a note
wddx_add_vars w32api_set_call_method

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 11:33:19 2007 PST