开发者社区> 问答> 正文

使用php oss sdk上传图片老是出现 RequestCoreException: cURL resource: Resource id #107; cURL error: Empty reply from server (52)

使用php sdk上传图片老是出现 RequestCoreException: cURL resource: Resource id #107; cURL error: Empty reply from server (52)

展开
收起
daimagic 2019-02-22 11:31:31 14039 0
3 条回答
写回答
取消 提交回答
  • 当文件尺寸变小的话,并且缓存过文件的尺寸也会造成上面的问题。

    putObject 文档中有这么个参数:

    Content-Length 字符串 否 用于描述HTTP消息体的传输大小。 如果请求头中的Content-Length值小于实际请求体中传输的数据大小,OSS仍将成功创建Object,但Object的大小只能等于Content-Length中定义的大小,其他数据将被丢弃。

    但是文档中并没有说小于的情形。

    当文档的实际大小小于Content-Length的时候就会出现上面的问题,服务器一直等待,但是并没有那么多数据,然后直到超时。

    OSS 的 Content-Length 是使用filesize函数获取的,但是PHP的filesize是会缓存的。

    解决方案就是在上传前,使用clearstatcache清除缓存。

    Filesize fails to get the real file size after each append with file_put_contents

    2020-07-07 20:38:54
    赞同 3 展开评论 打赏
  • 后端开发者,阿里云用户

    字面上的意思是 curl操作出错:服务器返回为空
    建议您贴一下代码。这是实例:https://help.aliyun.com/document_detail/88473.html?source=5176.11533457&userCode=re2rax3m&type=copy

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    $accessKeyId = "<yourAccessKeyId>";
    $accessKeySecret = "<yourAccessKeySecret>";
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 存储空间名称
    $bucket= "<yourBucketName>";
    // 文件名称
    $object = "<yourObjectName>";
    // <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt
    $filePath = "<yourLocalFile>";
    
    try{
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    
        $ossClient->uploadFile($bucket, $object, $filePath);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    2019-07-17 23:29:03
    赞同 展开评论 打赏
  • 看看链接的endpoint是正确的吗?服务器没有给任何返回值,说明链接超时了,但是服务器也没给response,另外看看有没有超时时间的设置

    2019-07-17 23:29:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载