ID: 31078
User updated by: ivan dot chollet at lynanda dot com
Reported By: ivan dot chollet at lynanda dot com
-Status: Feedback
+Status: Open
Bug Type: SOAP related
Operating System: freebsd 5.3
PHP Version: 5.0.2
Assigned To: dmitry
New Comment:
The problem is well addressed by the way you told me.
It works well.
The point is that your Soap extension consumes a large amount of
memory.
In fact I set the memory limit to 64M to address the problem raised by
the code above. 64M is much for a single php process. But if you change
the upper bound to 3 million instead of 2 then it does not work anymore,
so you would need memory_limit like 128M which is not reasonable.
The code above is a big variant of real world server code that should
send a 800K string filled with db stuff. The server can send this 800K
string through Soap only if memory_limit>256M. So at the moment there
is only a solution to make the service work : use sockets or switch on
asp.net
Please tell me wether you plan to address it or not.
ivan chollet
Previous Comments:
------------------------------------------------------------------------
[2004-12-14 13:31:35] [EMAIL PROTECTED]
Try to incrise "memory_limit" in your php.ini.
Your soap server dies because of memory overflow and doesn't send HTTP
response.
This is not a bug.
------------------------------------------------------------------------
[2004-12-14 02:43:17] ivan dot chollet at lynanda dot com
if someone wants a wsdl file that works with then just ask me
(basically there is one function returning a string a taking no
argument so very simple)
------------------------------------------------------------------------
[2004-12-14 02:28:06] ivan dot chollet at lynanda dot com
Description:
------------
When the result of a web service function is a big string, PHP sends
the error : Uncaught SoapFault exception:
"[HTTP] Error fetching http headers in (/usr/local/ etc...)"
The code used to make it crash is very simple.
Reproduce code:
---------------
on the server, let call our file "soap-server.php" with the code :
<?php
function crashfun{
for($i=0,$i<=2000000,$i++){
$result.='x';
}
return $result;
}
$server= new soapserver('somewsdlfile.wsdl')
$server->addfunction('crashfun');
$server->handle();
?>
on the client side, let invoke the web service in "soap-client.php" :
<?php
$client=new soapclient("somewsdlfile.wsdl");
print($client->crashfun());
?>
put all the files in the same directory
Expected result:
----------------
when you call on the command line "php -f soap-client.php > shit | vi
shit", you see a beautiful file filled with "x"s.
set the upper bound for the for loop in the code to 100 000 and
everything works well
set it to 2 000 000 and it crashes.
sorry i didn't take the time to check the exact limit for this upper
bound and it's about 1 000 000
Actual result:
--------------
the actual result is the bug mentionned in "description"
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=31078&edit=1