php文件大小换算,php大文件上传,下载,字节转kb

我用的是easyUpload插件,前端根据说明写好之后后端写一个接收接口。

我用的是thinkphp5

public function upload(){

$file = Request::instance()->file('file');

//给定目录

// var_dump($file);die;

$info = $file->move('upload');

var_dump($info);die;

if($info && $info->getPathname()){

// echo $info->getPathname();die;

return show(200,'success','/'.$info->getPathname());

}

return show(0,'upload error');

}

function show($status, $message,$data=[]){

return [

'code'=> intval($status),

'message'=>$message,

'data'=>$data,

];

}

上面是后端程序config里面设置默认json格式输出。

拓展下可以在$info里面获取文件大小等信息。

上述内容正常接收图片啥的都没问题,但是一旦遇到大文件会失败的。

因为php默认是对于每个页面的内存,时间,上传文件等有限制的。需要修改php.ini文件已确保大文件上传。

upload_max_filesize = 8m ;允许上传文件大小的最大值。默认为2M

post_max_size = 8m ;表单POST给PHP能接收的最大值。默认为8M

max_execution_time = 30 ;每个PHP页面运行的最大时间值(秒),默认30秒

max_input_time = 60 ;每个PHP页面接收数据所需的最大时间,默认60秒

memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M

将上述内容改为实际项目需要数量,重启apache即可。

--------------------------下载-------------------------

下载其实比较简单,直接在下载即可,但这样不太安全,过于暴露。

将所有的下载转至统一页面进行安全验证后释放会比较好。

id是该文件的唯一标识,token算是保护措施,验证通过则提供下载。方法写的比较随意可以多多拓展,可以验证登录,ip,session啥的验证。

public function download($id,$token){

if(!is_numeric($id) && $token != $this->token){

die('error009');

}

$file_info = model('GameVersion')->getOneData('id = '.$id);//获取文件信息

$file_url = '.'.$file_info['down_link'];

$new_name = $file_info['resource_name'];

if(!isset($file_url)||trim($file_url)==''){

echo '500';

die('error011');

}

if(!file_exists($file_url)){ //检查文件是否存在

echo '404';

die('error010');

}

$file_name=basename($file_url);//获取文件名

$file_type=explode('.',$file_url);

$file_type=$file_type[count($file_type)-1];//获取类型

$file_name = $new_name.'.'.$file_type;//设置名称类型

$file=fopen($file_url,'r'); //打开文件

//输入文件标签

header("Content-type: application/octet-stream");

header("Accept-Ranges: bytes");

header("Accept-Length: ".$file_info['file_size']);

header("Content-Disposition: attachment; filename=".$file_name);

//输出文件内容

echo fread($file,filesize($file_url));

fclose($file);

}

另外这里可能还会用到字节转kb或mb之类的需求,一并写在这里。

function kb($filesize){

if ($filesize >= 1073741824) {

$filesize = round($filesize / 1073741824 * 100) / 100 .' GB';

} elseif ($filesize >= 1048576) {

$filesize = round($filesize / 1048576 * 100) / 100 .' MB';

} elseif($filesize >= 1024) {

$filesize = round($filesize / 1024 * 100) / 100 . ' KB';

} else {

$filesize = $filesize.' Bytes';

}

return $filesize;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值