将PHP SoapClient与本地WSDL文件(NON-URI)一起使用的任何解决方法?

时间:2014-03-03 20:43:10

标签: php soap wsdl

我在一个既不需要也不需要运行本地httpd的服务器上以CLI模式运行应用程序。应用程序使用SOAP与Web服务提供程序进行传出交互。有问题的提供商有一些可用性问题,我们正试图通过在他们的建议下在本地托管WSDL文件来减少问题的数量。

似乎SoapClient构造函数(在WSDL模式下)只能使用URI WSDL文件,但我试图找出解决此限制的一些方法,并让它从本地文件系统中读取WSDL文件某种方式。我很惊讶SoapClient构造函数没有传递文件名或文本字符串的选项,我之前可以简单地读取它。

是否有人建议如何避开这种限制并做我正在尝试的事情?

1 个答案:

答案 0 :(得分:31)

SoapClient()采用的URI不仅支持网址,还支持本地文件路径。但是相对路径在这里不起作用,所以它需要是完整的文件路径。

以下是如何使用相对引用加载本地WSDL文件。如果WSDL与当前PHP文件位于同一目录中:

new SoapClient(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'the.wsdl.xml');

或者它是否在当前PHP文件的子文件夹中:

new SoapClient(dirname(__FILE__) . DIRECTORY_SEPARATOR. 'subfolder' . DIRECTORY_SEPARATOR . 'the.wsdl.xml');

或者它是否在当前PHP文件的父文件夹中:

new SoapClient(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'the.wsdl.xml');