为了账号安全,请及时绑定邮箱和手机立即绑定

PHP如何通过http传输大文件?

PHP如何通过http传输大文件?

PHP
凤凰求蛊 2019-03-09 02:59:19
‘前端’是UE4,通过http协议从我的nginx服务器下载大文件,文件传输必须将数据使用base64加密,网上百度了很多传输方法,这些方法都是针对前端是浏览器的情况,而我现在的情况是我服务器只是提供一个数据接口,‘前端’并不是浏览器,百度的方法如下: 1.fread分段读取2.readfile整个读取3.file_get_counts整个读取4.curl传输 他是通过base64加密传输,所以分段传输好像不能实现,只能将文件整个读取出来,base64加密,然后传输,我的代码如下: public function actionPak() { set_time_limit(0); //接收上传的数据 $post_data = file_get_contents('php://input'); // 解析json字符串 $json_obj = json_decode($post_data); if (isset($json_obj->Num)) { $file = \Yii::getAlias('@webroot') . '/pattern/pak/' . $json_obj->Num . '.pak'; //开启缓存 ob_start(); readfile($file); $data = ob_get_contents(); ob_end_clean(); return base64_encode($data); } else { return base64_encode('false'); } } 除了curl没有尝试过,其他方法都试过,现在的问题就是对于小文件传输是没有问题,当文件大小有几十M到几百M的时候,就会出现传输失败的情况。有没有大佬指点一下,谢谢
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

服务器 和 PHP 都有最大超时时间设置的,你都弄成无限了么

查看完整回答
反对 回复 2019-03-18
?
慕的地10843

TA贡献1785条经验 获得超8个赞

  1. 查一下 nginx 传输大文件时需要的配置。
  2. 谁说 base64 不能分段传输? base64 就是字符串,分段太方便了。
查看完整回答
反对 回复 2019-03-18
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

要分段读取,base64编码,上传,服务器base64解码,append模式写入。上传的时候按照顺序传就好了,不按照顺序的话每次加个编号,服务器写到对应段就好,就是server端处理有点繁琐。

不要设置过大的request length,没有止境。

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 568 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信