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


分类:短视频 时间:2024年10月02日 浏览:40
发表评论