diff options
| author | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:11:53 -0700 | 
|---|---|---|
| committer | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:11:53 -0700 | 
| commit | 12fe58d997d2066dc362fd393a18b4e5da190513 (patch) | |
| tree | 3ad8e5afb77829e1541ec96d86785760d65c04ac /system/helpers/download.php | |
| parent | 00f47d4ddddcd1902db817018dd79ac01bcc8e82 (diff) | |
Rename 'kohana' to 'system' to conform to the Kohana filesystem layout.  I'm comfortable with us not clearly drawing the distinction about the fact that it's Kohana.
Diffstat (limited to 'system/helpers/download.php')
| -rw-r--r-- | system/helpers/download.php | 105 | 
1 files changed, 105 insertions, 0 deletions
| diff --git a/system/helpers/download.php b/system/helpers/download.php new file mode 100644 index 00000000..49fed42c --- /dev/null +++ b/system/helpers/download.php @@ -0,0 +1,105 @@ +<?php defined('SYSPATH') OR die('No direct access allowed.'); +/** + * Download helper class. + * + * $Id: download.php 3769 2008-12-15 00:48:56Z zombor $ + * + * @package    Core + * @author     Kohana Team + * @copyright  (c) 2007-2008 Kohana Team + * @license    http://kohanaphp.com/license.html + */ +class download_Core { + +	/** +	 * Force a download of a file to the user's browser. This function is +	 * binary-safe and will work with any MIME type that Kohana is aware of. +	 * +	 * @param   string  a file path or file name +	 * @param   mixed   data to be sent if the filename does not exist +	 * @param   string  suggested filename to display in the download +	 * @return  void +	 */ +	public static function force($filename = NULL, $data = NULL, $nicename = NULL) +	{ +		if (empty($filename)) +			return FALSE; + +		if (is_file($filename)) +		{ +			// Get the real path +			$filepath = str_replace('\\', '/', realpath($filename)); + +			// Set filesize +			$filesize = filesize($filepath); + +			// Get filename +			$filename = substr(strrchr('/'.$filepath, '/'), 1); + +			// Get extension +			$extension = strtolower(substr(strrchr($filepath, '.'), 1)); +		} +		else +		{ +			// Get filesize +			$filesize = strlen($data); + +			// Make sure the filename does not have directory info +			$filename = substr(strrchr('/'.$filename, '/'), 1); + +			// Get extension +			$extension = strtolower(substr(strrchr($filename, '.'), 1)); +		} + +		// Get the mime type of the file +		$mime = Kohana::config('mimes.'.$extension); + +		if (empty($mime)) +		{ +			// Set a default mime if none was found +			$mime = array('application/octet-stream'); +		} + +		// Generate the server headers +		header('Content-Type: '.$mime[0]); +		header('Content-Disposition: attachment; filename="'.(empty($nicename) ? $filename : $nicename).'"'); +		header('Content-Transfer-Encoding: binary'); +		header('Content-Length: '.sprintf('%d', $filesize)); + +		// More caching prevention +		header('Expires: 0'); + +		if (Kohana::user_agent('browser') === 'Internet Explorer') +		{ +			// Send IE headers +			header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); +			header('Pragma: public'); +		} +		else +		{ +			// Send normal headers +			header('Pragma: no-cache'); +		} + +		// Clear the output buffer +		Kohana::close_buffers(FALSE); + +		if (isset($filepath)) +		{ +			// Open the file +			$handle = fopen($filepath, 'rb'); + +			// Send the file data +			fpassthru($handle); + +			// Close the file +			fclose($handle); +		} +		else +		{ +			// Send the file data +			echo $data; +		} +	} + +} // End download
\ No newline at end of file | 
