September 22nd, 2008Send Binary With Web Services in PHP – 2 Minutes Introduction
In PHP you have several ways of sending binary data. It can be primarily categorized in to non-optimized method (send as base64 binary) and optimized method (send as MTOM or SWA). Here I m talking about how to send binaries in above mentioned methods starting from a WSDL.
WSDL
Think you have a WSDL with the following XML Schema.
<!-- Here is my submitPerson method-> <xs:element name="submitPerson"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:int"/> <xs:element name="photo" type="xs:base64Binary"/> </xs:sequence> </xs:complexType> </xs:element>
The submit Person method submit the name,age and a photo which is a type of base64Binary.
Generated Class
After generating php class for this piece of code using wsdl2php you will haveĀ the following class.
class submitPerson { /** * @var string */ public $name; /** * @var int */ public $age; // You need to set only one from the following two vars /** * @var Plain Binary */ public $photo; /** * @var base64Binary */ public $photo_encoded; }
So it is very easy to fill the class with your own data. Note that you only need to fill one of the ‘photo’ or ‘photo_encoded’ fields. If you have binary already converted to base64 then you can use the ‘photo_encoded’ field where as if you only have the row binary just use the ‘photo’ field. Here are my values for this particular example.
$person = new submitPerson(); $person->name = "xxxx yyy"; $person->age = 35; $person->photo = file_get_contents("/photo/xxxyyy");
Sending Binary as MTOM
Here is the code you need to send the above structure as a MTOM message.
$client = new WSClient(array("useMTOM" => TRUE)); // anyway useMTOM is default to TRUE for WSClient $proxy = $client->getProxy(); $response = $proxy->submitPerson($person);
Sending Binary as Base64 Encoded string
You only need to change one option. That is setting “useMTOM” to FALSE will send the binary as Base64.
$client = new WSClient(array("useMTOM" => FALSE)); $proxy = $client->getProxy(); $response = $proxy->submitPerson($person);
SWA (SOAP With Attachments)
You can send the binary data as SWA by setting the “useMTOM” option to “SWA”. SWA is also a binary optimized method of sending attachments, but unlike with MTOM you can’t integrate security or reliability with this approach.