ID: 49226 User updated by: richard at rjharrison dot org Reported By: richard at rjharrison dot org Status: Open Bug Type: SOAP related Operating System: linux PHP Version: 5.3.0 New Comment:
@sjoerd, When I load the WSDL over HTTP there is no content-length header, as the response is sent chunk-encoded. As stated in the original report, if I save the WSDL to disk then it works, for example:- <?php $data = file_get_contents('http://myserver/path?wsdl'); file_put_contents("wsdl.xml", $data); $serv = new SoapServer("wsdl.xml"); // works ?> @stig, The behaviour you describe with different size WSDL might backup the theory that it's chunk-encoding related. With a small body size, I think PHP *does* send a content-length header; but if the body is larger than the output buffer (?) it will switch to chunk-encoding to allow for the unknown, variable length. Previous Comments: ------------------------------------------------------------------------ [2009-08-12 11:39:05] sjoerd-php at linuxonly dot nl Thank you for your bug report. When you retrieve the WSDL over HTTP, does the Content-Length header match the length of the WSDL? You can try saving the WSDL to disk and load that one instead. ------------------------------------------------------------------------ [2009-08-12 10:52:46] stig dot woxholt at fotoknudsen dot no We have started porting our soap services from 5.2.x to 5.3 and see the same problem here. I have spend quite some time trying to identify the problem, and it seemes to me that when the wsdl reaches a certain size it stops working. Ie. i have a service with 10 exposed methods. When all these methods are exposed i get an error, same as Richards. If i cut down on the number of exposed methods, to ie. 3 on the service it works. This is services that is used in production on the 5.2.x builds, and works perfectly there. Looks to me that there might be a bug in the XML parsing of the WSDL somewhere. ------------------------------------------------------------------------ [2009-08-11 19:30:45] richard at rjharrison dot org Description: ------------ SoapServer is failing on construction. I pass an URL with *valid* WSDL xml, which is generated automatically. - If I save the WSDL locally and load from disk it works. - If I serve the WSDL remotely from a static .xml file it works. - If I load the WSDL-url in my browser I get a well-formed XML response. - I can access the dodgy-wsdl URL via file_get_contents. - Using 5.2.6 on another machine it works fine. I inspected the http requests and think it could be related to chunked encoding (it fails on the chunked encoding response). Reproduce code: --------------- <?php $url = 'http://myserver/path?wsdl'; $serv = new SoapServer($url); ?> I can probably provide a sample url privately. Expected result: ---------------- $serv to be instantiated Actual result: -------------- SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://myserver/path?wsdl' : Premature end of data in tag definitions line 2 Below are the headers of the response that fails:- Date: Tue, 11 Aug 2009 19:15:29 GMT Server: Apache/2.2.8 (Unix) DAV/2 PHP/5.3.0 X-powered-by: PHP/5.3.0 Vary: Accept-Encoding,User-Agent Connection: close Transfer-encoding: chunked Content-type: text/xml ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49226&edit=1