-
Notifications
You must be signed in to change notification settings - Fork 0
Download helper for large files
I created a Download helper (CI 2.0) for LARGE files (without increasing your php.ini settings).
MY_download_helper.php (place it in, application > helpers) [code] <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /**
- CodeIgniter
- An open source application development framework for PHP 5.1.6 or newer
- @package CodeIgniter
- @author ExpressionEngine Dev Team
- @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
- @license http://codeigniter.com/user_guide/license.html
- @link http://codeigniter.com
- @since Version 1.0
- @filesource */
// ------------------------------------------------------------------------
/**
- CodeIgniter Download Helpers
- @package CodeIgniter
- @subpackage Helpers
- @category Helpers
- @author ExpressionEngine Dev Team
- @link http://codeigniter.com/user_guide/helpers/download_helper.html */
// ------------------------------------------------------------------------
/**
-
Force Download
-
Generates headers that force a download to happen
-
@access public
-
@param string filename
-
@param mixed the data to be downloaded
-
@return void */ if ( ! function_exists('force_download')) { function force_download($filename = '') { if ($filename == '') { return FALSE; }
// Try to determine if the filename includes a file extension. // We need it in order to set the MIME type if (FALSE === strpos($filename, '.')) { return FALSE; } // Grab the file extension $x = explode('.', $filename); $extension = end($x); // Load the mime types @include(APPPATH.'config/mimes'.EXT); // Set a default mime if we can't find it if ( ! isset($mimes[$extension])) { $mime = 'application/octet-stream'; } else { $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension]; } // Generate the server headers if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE) { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Transfer-Encoding: binary"); header('Pragma: public'); header("Content-Length: ".filesize($filename)); } else { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Content-Transfer-Encoding: binary"); header('Expires: 0'); header('Pragma: no-cache'); header("Content-Length: ".filesize($filename)); } readfile_chunked($filename);
} }
if ( ! function_exists('readfile_chunked')) { function readfile_chunked($filename, $retbytes=TRUE) { $chunksize = 1 * (1024 * 1024); $buffer = ''; $cnt =0;
$handle = fopen($filename, 'r');
if ($handle === FALSE)
{
return FALSE;
}
while (!feof($handle))
{
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
if ($retbytes)
{
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes AND $status)
{
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
}
}
/* End of file download_helper.php / / Location: ./system/helpers/download_helper.php */ [/code]