Re: [SOAP] Re: size limit for message sub-nodes?

From: Date: Sat, 02 Jan 2010 15:54:37 +0000
Subject: Re: [SOAP] Re: size limit for message sub-nodes?
References: 1 2  Groups: php.soap 
Request: Send a blank email to php-soap+get-3019@lists.php.net to get a copy of this message
I would hazard a guess that PHP is somewhere treating the decoded string as UTF-8 rather than binary. That would account for the missing bytes. On Wed, 2009-11-25 at 14:59 -0500, Brian Miles wrote: > 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> > > > >

« previous php.soap (#3019) next »