php upyun sdk 大文件上传错误 分析 排查 解决

问题引入与分析

[0] ConnectException in CurlFactory.php line 185
cURL error 28: Operation timed out after 60000 milliseconds with 0 bytes received (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
这里写图片描述

因为视频点播需要,我使用了upyun做点播服务,用upyun-php-sdk上传文件。
我是HTTP post请求上传500mb视频文件时,出现错误。http响应错误是错误码500。
排查步骤:

  • 先文件上传到服务器,不处理文件上传到又拍云,【没有问题】
  • 使用FTP工具,本地500mb文件上传又拍云,【没有问题】
  • 使用接口测试工具,本地测试接口上传又拍云,【出错】

主要是百度差不到。。。
分析了一下,觉得是http协议响应超时错误,
再来一次排查步骤:
- nginx HTTP响应timeout设置3600s,【没有用】
- php.ini 设置页面timeout,size等,【没有用】【不过出现过502,这里不做解释,统一用我的解决方案】
- php-fpm 设置响应timeout,【没有用】
- upyun-sdk设置上传timeout,【没有用】【好像又有用】【多次修改】【后来证明有用】
- 尝试php-sdk开发文档各种参数接口,【成功???】

解决方案

upyun-sdk代码超时修改

进入vendor/upyun/sdk/src/Upyun/Config.php
修改public $timeout = 60;public $timeout = 3600;

php代码

mediumUpYun($mediumPath, $savePath)接口说明
$mediumPath文件本地地址
$savePathupyun服务器相对地址,以根目录问相对路径
返回参数,为upyun服务器相对地址,如果要浏览器查看上传的文件,还要加上upyun服务器网址前缀

function mediumUpYun($mediumPath, $savePath) {
    set_time_limit(0); // 设置脚本最大执行时间 为0 永不过期
    $bucketConfig = new Config('server name', 'operater', 'password');
    $client = new Upyun($bucketConfig);
    $file = fopen($mediumPath, 'r'); // 读取本地文件
    $res = $client->write($savePath, $file, [], true); // 文件上传
    unlink($mediumPath); // 删除本地文件
    return $savePath;
}

参考文献

又拍云文档中心
又拍云php-sdk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值