【问题标题】:How can I modify the timeout for curl with Guzzle?如何使用 Guzzle 修改 curl 的超时时间?
【发布时间】:2017-06-22 15:27:30
【问题描述】:

我正在尝试使用 Guzzle 将 2GB 文件上传到 Amazon S3。我正在流式传输内容,我的代码如下所示:

$credentials = new Credentials( 'access_id', 'access_key');

        $s3 = S3Client::factory(array(
            'credentials' => $credentials
        ));;

        try {
            $s3->putObject(array(
                'Bucket' => $bucket,
                'Key'    => $obect,
                'Body'   => (strlen($body) < 1000 && file_exists($body)) ? Guzzle\Http\EntityBody::factory(fopen($body, 'r+')) : $body,
                'ACL'    => $acl,
                'ContentType' => $content_type
            ));
            return true;
        } catch (Aws\Exception\S3Exception $e) {
            error_log($e -> getMessage() . ' ' . $e -> getTraceAsString());
            return false;
        }

现在我得到的错误是:

致命错误:未捕获的异常 带有消息'[curl] 28 的'Guzzle\Http\Exception\CurlException': 操作在 30000 毫秒后超时,其中 -1 个字节中有 0 个 收到[网址] https://xxxxx.s3.amazonaws.com/6e12e321-adac-42a0-a932-8f345f9dd9c6' 在

如何使用 Guzzle 修改 curl 的超时时间?

【问题讨论】:

    标签: php amazon-web-services amazon-s3 guzzle


    【解决方案1】:

    您可以通过这种方式设置 curl 选项:

    $s3->putObject(array(
        'Bucket' => '...',
        'Key'    => '...',
        'Body'   => '...',
        'ACL'    => '...',
        'ContentType'  => '...',
        'curl.options' => array(
           CURLOPT_TIMEOUT => 10,
           CURLOPT_CONNECTTIMEOUT => 15
        )
    ));
    

    或者试试这个:

    $s3->getConfig()->set('curl.options', array(
                           CURLOPT_TIMEOUT => 10,
                           CURLOPT_CONNECTTIMEOUT => 15
                         )
    );
    

    【讨论】:

    • 仅供参考,CURLOPT_CONNECTTIMEOUT 不是一个选项。它在示例中作为选项列出一次,但实际上并不存在。它会抛出一个警告。
    • 你的代码可能有问题吗?可能你想设置不是整数值?因为这个参数包含文档。无论如何,这是一个新问题,您可以在此站点上以常规方式提问。
    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 2013-06-13
    • 2017-07-27
    • 2014-07-18
    • 1970-01-01
    • 2019-06-25
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多