php 下载文件 参数,php 下载文件/直接下载数据内容

classDownFile{//定义参数

public $data; //下载的数据或文件名

public $is_con=false; //是否是下载内容

public $down_file_name; //下载后的文件名

public $mime_type; //下载时设置的文件类型

public $file_del=false; //下载完成后是否删除服务器文件

private $file_ext='octet-stream'; //下载文件时设置的默认文件后缀(获取不到文件类型时设置)

private $default_mime_type='application/'; //下载时设置的默认文件类型

// 魔术方法-- 对象参数赋值

public function __get($name)

{return $this->name;

}public function __set($name,$value)

{if(!isset($this->name))

{exit("no is $name attr");

}$this->name = $value;

}public function __isset($name)

{return isset($this->name);

}//执行下载

public function output($data=null,$down_file_name=null,$is_con=null)

{//初始化赋值基本数据

if(!empty($data))$this->data=$data;if(isset($is_con))$this->is_con=$is_con;//如果下载的不是数据 并且不是文件 抛出异常

if (!$this->is_con && !is_file($this->data)) {throw new Exception('file not exists:' . $this->data);

}ob_end_clean();//下载文件名

$this->down_file_name($down_file_name);if($this->is_con)

{$this->mime_type=$this->default_mime_type.$this->file_ext;$file_size=strlen($this->data);$this->header($file_size);//如果数据量过多建议 while 方式输出

/*$read_size=0;

$buffer=1024; //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)

while ($read_size<=$file_size)

{

echo substr($this->data,$read_size,$buffer);

$read_size+=$buffer;

}*/

//如果数据量小使用以下方式输出

echo $this->data;

}else if(is_file($this->data))

{$this->get_mime_type();$this->down_file(filesize($this->data));

}

}//获取设置文件mime 类型

private functionget_mime_type()

{if(empty($this->mime_type))

{$finfo =finfo_open(FILEINFO_MIME_TYPE);$this->mime_type=finfo_file($finfo, $this->data);if(empty($this->mime_type))$this->mime_type=$this->default_mime_type.$this->file_ext;

}

}//获取设置下载文件名

private function down_file_name($down_file_name)

{if(!empty($down_file_name))$this->down_file_name=$down_file_name;else{if(empty($this->down_file_name))$this->down_file_name=time().$this->file_ext;

}

}//设置header

private function header($f_size)

{header("Content-type:".$this->mime_type);header("Accept-Ranges:bytes");header("Accept-Length:".$f_size);header("Content-Disposition:attachment;filename=".$this->down_file_name);header("Content-Transfer-Encoding:binary");header("Cache-Control:no-cache,no-store,max-age=0,must-revalidate");header("Pragma:no-cache");

}//下载文件函数

private function down_file($f_size)

{$this->header($f_size);if(!$this->file_del)

{//如果文件过大建议使用 while 方式读取输出

/*$fp=fopen($this->data,"r");

$buffer=1024; //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)

while(!feof($fp))

{

$file_con=fread($fp,$buffer); // fread 指针自动下移

echo $file_con;

}

fclose($fp);*/

//如果数据量小直接输出

readfile($this->data);

}else{$fp=fopen($this->data,"r");$buffer=1024; //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)

$file_count=0; //读取的总字节数

//向浏览器返回数据

while(!feof($fp) && $file_count

}fclose($fp);//下载完成后删除压缩包,临时文件夹

if($file_count >= $f_size)

{

@unlink($this->data);

}

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值