PHP:SoapClient构造函数非常慢(需要3分钟)

我是PHP的新手。 经过大量的搜索后,我设法以某种方式使用由Java和PHP创建的Web服务,但问题是SoapClient类的构造函数非常慢。 这是我的PHP代码:

 

这有时需要3分钟。 我不知道问题是什么。 在创建构造函数之后,我可以在1秒内在for循环中使用它50次,所以我很确定构造函数是减慢代码的部分。

您认为导致问题的是什么?

先谢谢你。

PS:关于我的另一个问题的更多信息: https : //stackoverflow.com/questions/5929669/call-a-wsdl-web-service-created-by-java-from-nushpherephped-phped

PPS:正如AJ所建议的,我使用XDebug和kcachegrind来分析问题。 如你所见,我是对的。 这是图片: XDebug在%(up)和time(down)中都会产生kcachegrind。

我也有同样的问题。 php SoapClient非常快,在Tomcat上部署了相同的Web服务。 我尝试做一个“wget”来查看响应中的标题是否不同,并且问题是WSDL缓存我找到的差异可能是原因:

使用Tomcat:

 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=utf-8 Content-Length: 23925 Date: Thu, 08 Mar 2012 23:13:10 GMT Connection: keep-alive 

使用Endpoint.publish(…)

 HTTP/1.1 200 OK Content-type: text/xml;charset=utf-8 Content-length: 23837 

现在我只需要找出如何强制Endpoint.publish(...)插入ServerDateConnection -header。

(编辑)我找到了一个解决方案:问题不仅在于Chunked数据,还在于“Keep-Alive”。 这可以通过在stream_context中设置标题“Connection:Close”来防止。 请看下面:

 class ImprovedSoapClient extends SoapClient { public function __construct($wsdlLocation) { parent::__construct( $wsdlLocation , array( , 'cache_wsdl' => WSDL_CACHE_NONE , 'stream_context'=>stream_context_create( array('http'=> array( 'protocol_version'=>'1.0' , 'header' => 'Connection: Close' ) ) ) ) ); } } 

我猜它不是PHP类的构造函数,而是它可能是第一次调用Java Web服务 – 在Java应用程序上初始化任何对象之前。

但是,您应该使用PHP分析工具(如Xdebug)确定这一点:

http://www.xdebug.org/docs/profiler

这看起来非常类似于您的问题: http : //www.ozonesolutions.com/programming/2011/05/nsclient-login-time/它使用php工具包而不是java,但解决方案可能仍然适用。