|
|
CIV. WDDX FunctionsIntroduzione
These functions are intended for work with .
Requisiti
In order to use WDDX, you will need to install the expat library
(which comes with Apache 1.3.7 or higher).
Istallazione
After installing expat compile PHP with
--with-xml and --enable-wddx.
Configurazione RuntimeQuesta estensione non definisce
alcuna direttiva di configurazione Resource TypeQuesta estensione non definisce alcun tipo di risorsa. Costanti PredefiniteQuesta estensione non definisce alcuna costante. Esempi
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.
Esempio 1. Serializing a single value <?php
print wddx_serialize_value("PHP to WDDX packet example", "PHP packet");
?> |
|
This example will produce:
Esempio 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:
Nota:
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 |
|
[email protected]
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>
|
|
[email protected]
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>
|
|
[email protected]
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=">>
|
|
[email protected]
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>
|
|
[email protected]
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>
|
|
[email protected]
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@thepr()jects.()rg
17-Nov-2000 08:32 |
|
Tutorial here :
XML and PHP. Part 1: Using the WDDX
functions
|
|
[email protected]
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:
|
|
|
| |