文件下载
/**
* 文件下载,服务器文件下载给客户
* @param $filepath 下载的文件完整名称
* @param $filename 下载后的文件名称
* @param int $readsize 每次读取的字节数 默认4096
*/
public static function sendFile($filepath, $filename = false, $readsize = 4096)
{
// 检测下载的文件是否可以被下载
if (!is_file($filepath) || !is_readable($filepath)) {
return false;
}
//设置下载文件的名称
$suffix = pathinfo($filepath, PATHINFO_EXTENSION);
if (!$filename) {
$filename = date('YmdHis');
}
$filename = trim($filename, '.' . $suffix) . '.' . $suffix;
// 设置头信息
header('Content-Type:application/octet-stream');
header('Accept-Ranges:bytes');
header('Content-Length:' . filesize($filepath));
header('Content-Disposition:attachment;filename=' . $filename);
//获取文件内容
$handle = fopen($filepath, 'rb');
while (!feof($handle)) {
echo fread($handle, $readsize);
}
fclose($handle);
exit;
}
/**
* 文件下载至服务器
* @param $file_source 远程文件地址
* @param $file_target 下载至本地的完整文件名
* @param $file_cover 是否覆盖下载
*/
public static function download($file_source, $file_target, $file_cover = true)
{
if (!is_dir(dirname($file_target)) && !mkdir(dirname($file_target, 0777, true))) {
// 目标文件所在的目录不存在且无法创建
self::error(self::language('目录创建失败'));
return false;
}
if (!$file_cover && is_file($file_target)) {
// 目标文件已存在且不允许覆盖
self::error(self::language('已存在相同的文件'));
return false;
}
$rh = fopen($file_source, 'rb');
$wh = fopen($file_target, 'wb');
if (false === $rh || false === $wh) {
self::error(self::language('读取或打开文件失败'));
return false;
}
while (!feof($rh)) {
if (fwrite($wh, fread($rh, 1024)) === false) {
self::error(self::language("文件无法被写入\"{$file_target}\""));
return false;
}
}
fclose($rh);
fclose($wh);
return true;
}发表评论