PHP批量下载方法

PHP批量下载方法

界面:

$.get(“< ?php echo url::base(true);?>inventory/report/buildCsv”, //后台路径

{‘params’:’params’}, //参数

function (filename) {

//将参数传递到后台,后台创建好csv后返回文件名,再次访问文件来下载

window.open(“< ?php echo url::base(true);?>downloads/”+filename);

}

);

后台:

public function action_buildCsv () {

set_time_limit(0);

//进行文件加密,返回md5格式文件名字,这里我加上时间戳是因为我需要下载的数据是实时的,如果同一天内下载一次就行,可以不用,一天内下载一次即可其他时间直接下载

$_GET[‘date’] = $_SERVER[‘REQUEST_TIME’];

$md5 = md5(join(‘::’,$_GET));

//如果同一天下载一次就行则加上条件

//date(‘Y-m-d’,$_SERVER[‘REQUEST_TIME’])!==date(‘Y-m-d’,filemtime($path))

if(!is_file($path)||){

$filename = DOCROOT.”downloads/”.$md5.”.csv”;

$fp=fopen($filename,”w+”); //打开文件

//标题,后边加上\n即可,windows加上\r\n进行换行

$list_str = ‘采购单号,SKU,品名,金额.”\n”;

………..根据get以及sql获取数据为$lists(也可以用mysqli_fetch_row方式)……

foreach($lists as $list) {

//这里是拼接的,此处省略赋值直接用一些变量代替

//这里要注意的就是中文用\”来包含,因为字符串中间包含空格时会出现错位

//对于业务要使用的数字运算肯定不能加\”,否则他们excle求和不能用

$list_str .= “{$pu_id]},{$sku},\”{$list[‘sku_name’]}\”,{$list[‘money’]}\n”;

}

fputs($fp,$list_str);

fclose($fp);

}

ob_end_flush();

header(“Content-type:text/csv”);

header(“Content-Disposition:attachment;filename={$md5}.csv”); //“生成文件名称”

header(‘Cache-Control:must-revalidate,post-check=0,pre-check=0’);

header(‘Expires:0’);

header(‘Pragma:public’);

echo $md5;

exit; } 注:服务器创建的承装下载文件的文件夹downloads权限要改为可读写