blob: aea948d818e45fadf3b3a7ba4a3775e1705c77d7 [file] [log] [blame]
Derek Jones37f4b9c2011-07-01 17:56:50 -05001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Greg Aker741de1c2010-11-10 14:52:57 -06005 * An open source application development framework for PHP 5.1.6 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05007 * NOTICE OF LICENSE
8 *
9 * Licensed under the Open Software License version 3.0
10 *
11 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
18 *
Derek Allard2067d1a2008-11-13 22:59:24 +000019 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
Greg Aker0defe5d2012-01-01 18:46:41 -060021 * @copyright Copyright (c) 2008 - 2012, EllisLab, Inc. (http://ellislab.com/)
Derek Jonesf4a4bd82011-10-20 12:18:42 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Derek Allard2067d1a2008-11-13 22:59:24 +000023 * @link http://codeigniter.com
24 * @since Version 1.0
25 * @filesource
26 */
27
28// ------------------------------------------------------------------------
29
30/**
31 * CodeIgniter Download Helpers
32 *
33 * @package CodeIgniter
34 * @subpackage Helpers
35 * @category Helpers
Derek Jonesf4a4bd82011-10-20 12:18:42 -050036 * @author EllisLab Dev Team
Derek Allard2067d1a2008-11-13 22:59:24 +000037 * @link http://codeigniter.com/user_guide/helpers/download_helper.html
38 */
39
40// ------------------------------------------------------------------------
41
42/**
43 * Force Download
44 *
45 * Generates headers that force a download to happen
46 *
47 * @access public
48 * @param string filename
49 * @param mixed the data to be downloaded
50 * @return void
Barry Mienydd671972010-10-04 16:33:58 +020051 */
Derek Allard2067d1a2008-11-13 22:59:24 +000052if ( ! function_exists('force_download'))
53{
54 function force_download($filename = '', $data = '')
55 {
56 if ($filename == '' OR $data == '')
57 {
58 return FALSE;
59 }
60
61 // Try to determine if the filename includes a file extension.
62 // We need it in order to set the MIME type
63 if (FALSE === strpos($filename, '.'))
64 {
65 return FALSE;
66 }
Barry Mienydd671972010-10-04 16:33:58 +020067
Derek Allard2067d1a2008-11-13 22:59:24 +000068 // Grab the file extension
69 $x = explode('.', $filename);
70 $extension = end($x);
71
72 // Load the mime types
Greg Akerd96f8822011-12-27 16:23:47 -060073 if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
74 {
75 include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php');
76 }
77 elseif (is_file(APPPATH.'config/mimes.php'))
78 {
79 include(APPPATH.'config/mimes.php');
80 }
Barry Mienydd671972010-10-04 16:33:58 +020081
Derek Allard2067d1a2008-11-13 22:59:24 +000082 // Set a default mime if we can't find it
83 if ( ! isset($mimes[$extension]))
84 {
85 $mime = 'application/octet-stream';
86 }
87 else
88 {
89 $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
90 }
Eric Roberts0e4d2b62012-01-23 18:19:20 -060091
Derek Allard2067d1a2008-11-13 22:59:24 +000092 // Generate the server headers
Eric Roberts0e4d2b62012-01-23 18:19:20 -060093 header('Content-Type: "'.$mime.'"');
94 header('Content-Disposition: attachment; filename="'.$filename.'"');
95 header('Expires: 0');
96 header("Content-Transfer-Encoding: binary");
97 header("Content-Length: ".strlen($data));
98 header('Pragma: no-cache');
99
100 // Internet Explorer-specific headers.
101 if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000102 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000103 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
Derek Allard2067d1a2008-11-13 22:59:24 +0000104 header('Pragma: public');
Derek Allard2067d1a2008-11-13 22:59:24 +0000105 }
Barry Mienydd671972010-10-04 16:33:58 +0200106
Derek Allard2067d1a2008-11-13 22:59:24 +0000107 exit($data);
108 }
109}
110
111
112/* End of file download_helper.php */
Derek Jonesa3ffbbb2008-05-11 18:18:29 +0000113/* Location: ./system/helpers/download_helper.php */