/**
* 下载文件
* filename 不包括后缀名
*/
public
function
download(
$_path
,
$filename
=
''
) {
if
(
file_exists
(
$_path
)) {
$fullPath
= CHtml::decode(
$_path
);
$filename
=
$filename
?
$filename
:
substr
(
strrchr
(
$fullPath
,
'/'
), 1);
// Parse Info / Get Extension
$fsize
=
filesize
(
$fullPath
);
$path_parts
=
pathinfo
(
$fullPath
);
$ext
=
strtolower
(
$path_parts
[
"extension"
]);
$filename
.=
'.'
.
$ext
;
// Determine Content Type
switch
(
$ext
) {
case
'apk'
:
$ctype
=
'application/vnd.android.package-archive'
;
break
;
case
'chm'
:
$ctype
=
'application/octet-stream'
;
break
;
case
"pdf"
:
$ctype
=
"application/pdf"
;
break
;
case
"txt"
:
$ctype
=
"application/txt"
;
break
;
case
"zip"
:
$ctype
=
"application/zip"
;
break
;
case
"doc"
:
$ctype
=
"application/msword"
;
break
;
case
"xls"
:
$ctype
=
"application/vnd.ms-excel"
;
break
;
case
"ppt"
:
$ctype
=
"application/vnd.ms-powerpoint"
;
break
;
case
"gif"
:
$ctype
=
"image/gif"
;
break
;
case
"png"
:
$ctype
=
"image/png"
;
break
;
case
"jpeg"
:
case
"jpg"
:
$ctype
=
"image/jpg"
;
break
;
default
:
$ctype
=
"application/force-download"
;
}
$ua
=
$_SERVER
[
"HTTP_USER_AGENT"
];
$encoded_filename
= rawurlencode(
$filename
);
$encoded_filename
=
str_replace
(
"+"
,
"%20"
,
$encoded_filename
);
header(
"Pragma: public"
);
// required
header(
"Expires: 0"
);
header(
"Cache-Control: must-revalidate, post-check=0, pre-check=0"
);
header(
"Cache-Control: private"
, false);
// required for certain browsers
header(
"Content-Type: $ctype"
);
// header('Content-Disposition: attachment; filename="'.rawurlencode($filename).'"');
if
(preg_match(
"/MSIE/"
,
$ua
)) {
header(
'Content-Disposition: attachment; filename="'
.
$encoded_filename
.
'"'
);
}
else
if
(preg_match(
"/Firefox/"
,
$ua
)) {
header(
"Content-Disposition: attachment; filename*=utf8''"
.
$filename
.
'"'
);
}
else
{
header(
'Content-Disposition: attachment; filename="'
.
$filename
.
'"'
);
}
header(
"Content-Transfer-Encoding: binary"
);
header(
"Content-Length: "
.
$fsize
);
ob_clean();
flush
();
readfile(
$fullPath
);
}
else
{
throw
new
Exception(
'文件不存在!'
, 1);
}
}
所有评论
加载评论 ...
发表评论