文件下载
/** * 文件下载,服务器文件下载给客户 * @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; }
发表评论