1

私はPHPに、一定期間Webサービスに接続して情報を送信しないように強制しようとしています。以下を使用していますが、何らかの理由で許可された時間を超えて実行され、その理由がわかりません。たとえば、30 秒に設定すると、場合によってはもっと時間がかかることがわかります。時間がかかりすぎる場合は、接続を 100% 切断する方法を見つける必要があります。

ティア、ウィル

    $intTimeout = $this->getTimeout();
        $client = new SoapClient("{$this->url}?WSDL", array('trace' => 0, 'connection_timeout'=>$intTimeout));
        試す {
            $this->response = $client->someService($objPerson);
        }
        catch(例外 $e) {

        }
        $this->restoreTimeout();
    関数 getTimeout()
    {
        $intTimeout = @$this->timeout ? $this->タイムアウト: 60;
        $_SESSION['old_sock'] = ini_get('default_socket_timeout');
        ini_set('default_socket_timeout', $intTimeout);

        $intTimeout を返します。
    }

    関数 restoreTimeout()
    {
        $intCurSockTime = @$_SESSION['old_sock'];
        if($intCurSockTime) ini_set('default_socket_timeout', $intCurSockTime);
    }
4

1 に答える 1

0

問題は次のとおりです。default_socket_timeout は、ソケットが応答する前にカウントされます。応答がある限り、ソケットは永遠に待機します。

これは、フォールバックとしてタイムアウトを指定して curl を使用する良い例です: http://www.darqbyte.com/2009/10/21/timing-out-php-soap-calls/

同様の質問: PHP SoapClient タイムアウト

于 2014-07-03T11:43:56.420 に答える