php文件可以包含中文吗,php下载文件包含中文名称

这篇文章主要介绍了php下载文件包含中文名称,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

控制器代码:public function savefile()

{

//接收需要下载的文件名称

/*if(!isset($_GET['file'])) exit('Filename is empty');

if(empty($_GET['file'])) exit('Filename not valid');*/

$file = I('get.file', '', 'trim');

// $file = '/Public/upload/files/20180426/abc.zip';

// $file = '/Public/upload/files/20180426/123.zip';

$new_name = explode('/', $file);

$new_name = $new_name[count($new_name) - 1];

$file_name = $new_name;

ob_clean();//清除一下缓冲区

//获得文件名称

$filename = basename(urldecode($file));

//文件完整路径(这里将真实的文件存放在temp目录下)

// $filePath = __DIR__."/temp/".$filename;

$root = dirname(dirname(dirname(dirname(__FILE__))));

$filePath = $root . $file;

//将utf8编码转换成gbk编码,否则,文件中文名称的文件无法打开

$filePath = iconv('UTF-8', 'gbk', $filePath);

//检查文件是否可读

if (!is_file($filePath) || !is_readable($filePath)) exit('Can not access file ' . $filename);

/**

* 这里应该加上安全验证之类的代码,例如:检测请求来源、验证UA标识等等

*/

//以只读方式打开文件,并强制使用二进制模式

$fileHandle = fopen($filePath, "rb");

if ($fileHandle === false) {

exit("Can not open file: $filename");

}

//文件类型是二进制流。设置为utf8编码(支持中文文件名称)

header('Content-type:application/octet-stream; charset=utf-8');

header("Content-Transfer-Encoding: binary");

header("Accept-Ranges: bytes");

//文件大小

header("Content-Length: " . filesize($filePath));

//触发浏览器文件下载功能

// header('Content-Disposition:attachment;filename="'.urlencode($filename).'"');

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

//循环读取文件内容,并输出

while (!feof($fileHandle)) {

//从文件指针 handle 读取最多 length 个字节(每次输出10k)

echo fread($fileHandle, 10240);

}

//关闭文件流

fclose($fileHandle);

}

页面及js:

style="padding: 5px 10px 0px 5px">{$vo.name}

下载

mui('body').on('tap', '.down', function () {

var url = $(this).attr("data-url");

window.location.href = '__CONTROLLER__/savefile?file=' + url;

});

此处js为mui框下的,h5可改为click事件

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值