[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-soap
Subject:    [SOAP] Re: size limit for message sub-nodes?
From:       Brian Miles <selimnairb () gmail ! com>
Date:       2009-11-25 19:59:42
Message-ID: 1E01CF27-C60B-4CD1-81BB-A1FF27185D2F () gmail ! com
[Download RAW message or body]


Hello,

I have narrowed my problem down more.  Firstly, the truncation is happening for \
base64 images that are as small as 2,010 bytes.  Further, the data being passed into \
the function "submitSighting" appears to be fine.  That is, I compared the length of \
the $photovideo argument within submitSighting on the SOAP server with the length of \
the image on the client side, before it is sent to the SOAP server, and they are \
identical.  So I am lead to believe that the base64_encode function producing strings \
that are not the same as those my client are producing.

My solution for now is to just rip the original client-formatted base64 \
representation of the image out of the request as follows:

if (preg_match('/<photovideo xsi:type="xsd:base64Binary">(.*)<\/photovideo>/ims', \
$request, $matches)) {  $myPhotoVideo = $matches[1];
}

This is less than ideal, and opens me up to potential security vulnerabilities, but \
it works for now.

If anyone has any advice, I'd love to hear it.

Best,

Brian

On Nov 25, 2009, at 1:35 AM, Brian Miles wrote:

> 
> Hello,
> 
> I have defined a SOAP message for submitting mixed data, including a base64 encoded \
> image.  Everything works fine when the images I send are small (640x480).  However \
> when my images grow too large (1024x768), the image data coming out of the SOAP \
> request appears to be truncated.  For example, instead of being 169,048 bytes, it \
> is 166,448 bytes. 
> What I'm doing is re-encoding the image data that SoapServer has decoded for me for \
> the purpose of storing it in a text field in a mysql table.  So it may be that \
> SoapServer is truncating the data.  Or (less likely?) it may be that base64_encode \
> is truncating the data. 
> Is there a size limit for message sub-nodes that SoapServer can handle?
> 
> I have attached relevant sections of my server and WSDL file below.
> 
> 
> Thanks in advance for any advice.
> 
> Brian
> 
> 
> Here are the relevant parts of my SOAP server:
> 
> <?php
> 
> function submitSighting($collector_id, 
> 	 		$species_common_name, 
> 			$sighting_datetime,
> 			$location_lat,
> 			$location_long,
> 			$notes = NULL,
> 			$alive_flag = true,
> 			$photovideo = NULL) {
> 
> $species_common_name = mysql_real_escape_string($species_common_name);
> $sighting_datetime = mysql_real_escape_string($sighting_datetime);
> $location_lat = mysql_real_escape_string($location_lat);
> $location_long = mysql_real_escape_string($location_long);
> if (NULL != $notes) {
> $notes = mysql_real_escape_string($notes);
> } else {
> $notes = "";
> }
> if (true == $alive_flag) {
> $alive_flag = 'Y';
> } else {
> $alive_flag = 'N';
> }
> if (NULL != $photovideo) {
> $photovideo = base64_encode($photovideo);
> } else {
> $photovideo = "";
> }
> 
> $species_id = getSpeciesIdFromCommonName($species_common_name, $link); // function \
> definition removed from this snippet if (!$species_id) {
> $msg =  "The species " . $species_common_name . " is unknown.";
> }
> 
> // Insert into the sightings table
> $query = sprintf("insert into pws_sightings values (NULL, %d, %d, 'N', '%s', %f, \
> %f, '%s', '%s', '%s')",  $collector_id, 
> 		   $species_id,
> 		   $sighting_datetime,
> 		   $location_lat,
> 		   $location_long,
> 		   $notes,
> 		   $alive_flag,
> 		   $photovideo);
> 
> $result = mysql_query($query);
> if ($result) {
> $msg = "Success"; 
> } else {
> $msg .= " was NOT successfully submitted due to error: " . mysql_error(); 
> }
> 
> error_log($msg, 0);
> 
> return $msg;
> }
> 
> // SOAP stuff
> ini_set("soap.wsdl_cache_enabled", "1"); // Enable WSDL cache
> $server = new SoapServer("pws.wsdl");
> 
> $server->addFunction("submitSighting");
> 
> $server->handle();
> 
> ?>
> 
> 
> Here is the relevant excerpt from my WSDL file:
> 
> <message name='submitSightingRequest'>
> <part name='collector_id' type='xsd:integer'/>
> <part name='species_common_name' type='xsd:string'/>
> <part name='sighting_datetime' type='xsd:dateTime'/>
> <part name='location_lat' type='xsd:double'/>
> <part name='location_long' type='xsd:double'/>
> <part name='notes' type='xsd:string'/>
> <part name='alive_flag' type='xsd:boolean'/>
> <part name='photovideo' type='xsd:base64Binary'/>
> </message>
> <message name='submitSightingResponse'>
> <part name='Result' type='xsd:string'/>
> </message>
> 


-- 
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic