PHP 任意格式文件下载

 超哥  Yii1  2020-04-02  910  发表评论
/**
     * 下载文件
     * 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);
        }
    }
所有评论
加载评论 ...
发表评论