Salesforce/PHP - outbound messages (SOAP) - memory limit issue
- by Phill Pafford
I'm using Salesforce to send outbound messages (via SOAP) to another server. The server can process about 8 messages at a time, but will not send back the ACK file if the SOAP request contains more than 8 messages. SF can send up to 100 outbound messages in 1 SOAP request and I think this is causing a memory issue with PHP. If I process the outbound messages 1 by 1 they all go through fine, I can even do 8 at a time with no issues. But larger sets are not working.
ERROR in SF:
org.xml.sax.SAXParseException: Premature end of file
Looking in the HTTP error logs I see that the incoming SOAP message looks to be getting cut of which throws a PHP warning stating:
Premature end of data in tag ...
PHP Fatal error:
Call to a member function getAttribute() on a non-object
This leads me to believe that PHP is having a memory issue and can not parse the incoming message due to it's size.
I was thinking I could just set:
ini_set('memory_limit', '64M');
But would this be the correct approach? Is there a way I could set this to increase with the incoming SOAP request dynamically?
UPDATE: Adding some code
$data = fopen('php://input','rb');
$headers = getallheaders();
$content_length = $headers['Content-Length'];
$buffer_length = 1000;
$fread_length = $content_length + $buffer_length;
$content = fread($data,$fread_length);
/**
* Parse values from soap string into DOM XML
*/
$dom = new DOMDocument();
$dom->loadXML($content);
....