问题引入与分析
[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开发文档各种参数接口,【成功???】
解决方案
mediumUpYun($mediumPath, $savePath)
接口说明
$mediumPath
文件本地地址
$savePath
upyun服务器相对地址,以根目录问相对路径
返回参数,为upyun服务器相对地址,如果要浏览器查看上传的文件,还要加上upyun服务器网址前缀
function mediumUpYun($mediumPath, $savePath) {
set_time_limit(0); // 设置脚本最大执行时间 为0 永不过期
$bucketConfig = new Config('medium-oee', 'dai', 'PH9cMUMc#DPA');
$client = new Upyun($bucketConfig);
$file = fopen($mediumPath, 'r'); // 读取本地文件
$res = $client->write($savePath, $file, [], false); // 文件上传
unlink($mediumPath); // 删除本地文件
return $savePath;
}