コントローラー経由でファイルを出力する

すごく単純なことだけど、これまでやったことがなかったのでメモ。
ファイル名はContent-Dispositionヘッダーを使って指定するんすね。今まで知らんかった。

<?php

class Test extends CI_Controller {    
        public function files($name) {
            $this->load->helper('file');
            $this->load->library('upload');
            
            // ファイルを読み込んで出力
            $path = $this->upload->upload_path . $name;
            $data = readfile($path);
            $mime = get_mime_by_extension($path);
            
            $this->output
                ->set_content_type($mime)
                ->set_header("Content-Disposition: attachment; filename=\"{$name}\"")
                ->set_output($data);          
        }
}
?>