【问题标题】:PHP function shuts down on SoapClient::__doRequest connection timeoutPHP 函数在 SoapClient::__doRequest 连接超时时关闭
【发布时间】:2015-01-13 18:28:29
【问题描述】:

我正在尝试编写一个与外部 API 通信的后台函数,以检索和更新我们服务器上大约 500,000 条记录的信息。这需要时间来运行。我遇到的问题是这个 PHP 致命错误来自一个在 foreach 循环中调用的函数,它完全关闭了该函数:

SoapClient::__doRequest(): connect() failed: Connection timed out in /path/to/function on line ABC

这是该函数的模拟版本,其中指出了抛出致命错误的行,并关闭了该函数:

private function APIUpdateFunction($table,$record,$fields,$data) {

    $soap = new SoapClient("https://www.endpoint.com/API/stuff.whatever");

    $result = $soap->UpdateRecord(array(  

        "credentials"   => API_CREDS,
        "table"         => $table,
        "record"        => $record,
        "fields"        => $fields,
        "data"          => $data                                    

    )); // THIS IS WHERE THE FATAL ERROR IS BEING THROWN

}

我想做的是创建一个解决方法,如果函数由于此连接超时而关闭,我想:

A) 执行一组新的操作,例如重新启动函数本身

B) 完全绕过错误,并在下一步中检查响应值。例如,如果 $result = NULL,则此函数中的剩余项将被绕过并返回 FALSE 值。

解决办法是什么?

【问题讨论】:

    标签: php function soap-client fatal-error


    【解决方案1】:

    您可以控制脚本连接到远程主机/服务所需的时间,以及套接字连接应等待服务器响应的时间。

    第一个选项可以通过在创建 Soap Client 时指定超时来配置:

    $client = new SoapClient($wsdl, array("connection_timeout"=>15));
    

    第二个选项可以使用:

    ini_set('default_socket_timeout', 180);
    

    现在如果你想在主机连接或套接字连接期间捕获超时错误,你应该捕获一个SoapFault 异常,例如:

    private function APIUpdateFunction($table,$record,$fields,$data) 
    {
        try {
            $soap = new SoapClient("https://www.endpoint.com/API/stuff.whatever");
    
            $result = $soap->UpdateRecord(array(  
    
            "credentials"   => API_CREDS,
            "table"         => $table,
            "record"        => $record,
            "fields"        => $fields,
            "data"          => $data                                    
    
            )); // THIS IS WHERE THE FATAL ERROR IS BEING THROWN
        } catch (SoapFault $e) {
            // There was an error with the Soap Client
            // Do something here
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 2011-03-30
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多