|
|
CVI. WDDX FunctionsIntroduction
These functions are intended for work with .
Requirements
In order to use WDDX, you will need to install the expat library
(which comes with Apache 1.3.7 or higher).
Installation
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. Runtime ConfigurationThis extension has no configuration directives defined in php.ini. Resource TypesThis extension has no resource types defined. Predefined ConstantsThis extension has no constants defined. Examples
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 <?php
print wddx_serialize_value("PHP to WDDX packet example", "PHP packet");
?> |
|
This example will produce:
예 2. Using incremental packets <?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);
print $packet;
?> |
|
This example will produce:
참고:
If you want to serialize non-ASCII characters you have to set
the appropriate locale before doing so (see
setlocale()).
User Contributed Notes WDDX Functions |
add a note |
yzhang at sfu dot ca
26-May-1999 07:29 |
|
To make these examples work, you'll probably want to format the output with
a call to htmlentities:
<pre>
$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);
print
htmlentities($packet);
</pre>
|
|
djm at web dot us dot uu dot net
19-Oct-1999 03: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: " .
$value["pi"] . " \n";
print "cities
is: \n";
while (list($key, $val) =
each($value["cities"])) {
print "$key =>
$val \n";
}
</pre>
which
outputs:
<pre>
pi is:
3.1415926
cities
is:
0 => Austin
1 => Novato
2 =>
Seattle
</pre>
|
|
djm at web dot us dot uu dot net
20-Oct-1999 08:30 |
|
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:
<a href=">>
|
|
djm at web dot us dot uu dot net
02-Mar-2000 10: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>
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: " .
$value->{"pi"} . " \n";
print "cities
is: \n";
$key = 0;
foreach $val
(@{$value->{"cities"}}) {
print "$key =>
$val \n";
$key++;
}
</PRE>
|
|
djm at web dot us dot uu dot net
02-Mar-2000 10: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: " .
$value->{"pi"} . " \n";
print "cities
is: \n";
$key = 0;
foreach $val
(@{$value->{"cities"}}) {
print "$key =>
$val \n";
$key++;
}
</PRE>
|
|
eric at boca dot hollywood dot com
09-May-2000 10:36 |
|
If you take a wddx recordset (I.E. in Cold Fusion) will Deserializing the
packet create a Result varible?
|
|
philip at thepr()jects dot ()rg
17-Nov-2000 08:32 |
|
Tutorial here :
XML and PHP. Part 1: Using the WDDX
functions
|
|
bradburn at kiwi dot de
30-Jul-2002 02: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 @ )
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.
|
|
pointsystems.com, sbarnum
04-Sep-2002 05:11 |
|
a good FAQ on WDDX can be found here:
|
|
add a note |
| |