Php 将SoapClient请求绑定到特定IP

Php 将SoapClient请求绑定到特定IP,php,soap,soap-client,Php,Soap,Soap Client,我需要实现一个webservice,其中SoapServer要求我在SoapClient机器上使用一个特定的IP发送数据,该机器有一组不同的IP。问题是,如何强制PHP使用此特定IP发送该请求 关于SOAP的PHP文档非常糟糕 谢谢 有了哈尔夫丹的回答,我就能够解决这个问题了,所以我在这里发布了一个关于结果的片段: protected function load_ws() { if ($this->ws == null) { // load webservice

我需要实现一个webservice,其中
SoapServer
要求我在
SoapClient
机器上使用一个特定的IP发送数据,该机器有一组不同的IP。问题是,如何强制PHP使用此特定IP发送该请求

关于SOAP的PHP文档非常糟糕

谢谢


有了哈尔夫丹的回答,我就能够解决这个问题了,所以我在这里发布了一个关于结果的片段:

protected function load_ws() {
    if ($this->ws == null) { // load webservice

        ini_set("soap.wsdl_cache_enabled", 0);
        ini_set("allow_url_fopen", 1);

        try {
            if ($this->context == null) // load stream context socket
                $this->context = stream_context_create(array(
                    "socket" => array(
                        "bindto" => te_auth_ip.":0"
                    )
                ));

            $this->ws = new SoapClient($this->wsdl_path, array(
                "soap_version" => SOAP_1_1,
                "style" => SOAP_RPC,
                "use" => SOAP_ENCODED,
                "authentication" => SOAP_AUTHENTICATION_BASIC,

                "login" => te_login,
                "password" => te_pass,

                "encoding" => "UTF-8",
                "trace" => true,
                "exceptions" => true,
                "compression" => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
                "connection_timeout" => te_timeout,
                "stream_context" => $this->context
            ));

        } catch (SoapFault $fault) {
            $this->error($fault, "LOAD");
        }

    }
}
这应该有效(请参阅):

我同意文档中应包含此选项。

此选项应有效(请参阅):


我同意文档中应该包含此选项。

感谢您的建议,但是我得到一个错误,我得到:
SOAP-ENV:Client:Operation''未在该服务的WSDL中定义。
现在执行调用时$WSDL需要是您的WSDL。它只是放在这个示例脚本中,因为它需要在实例化时提供给SoapClient。是的,我已经按照您所说的方式实现了它。问题是,如果我分配了一个端口,它就会出现错误,如果我只是填充ip,它就会工作,显然必须在原始wsdl中定义一个端口。感谢您的建议,但是我得到了一个错误,我得到:
SOAP-ENV:Client:Operation“”未在该服务的WSDL中定义
现在执行调用时$WSDL需要是您的WSDL。它之所以被放在这个示例脚本中,是因为它需要在实例化时提供给SoapClient。是的,我已经按照您所说的方式实现了它。问题是,如果我分配了一个端口,它就会出现错误,如果我只是填充它工作的ip,显然必须在原始wsdl中定义一个端口。
$options = array('socket' => array('bindto' => 'www.xxx.yyy.zzz:port'));
$context = stream_context_create($options);
$soap = new SoapClient($wsdl, array('location'=>'http://...','uri' => '...','stream_context' => $context));