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

2022-08-30 19:06:31

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

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

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


答案 1

SoapClient() 采用一个 URI,该 URI 不仅支持 Web 地址,还支持本地文件路径。但相对路径在这里不起作用,因此它需要是完整的文件路径。

下面介绍如何加载具有相对引用的本地 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');

答案 2

推荐