diff options
author | Bharat Mediratta <bharat@menalto.com> | 2008-10-31 22:12:14 +0000 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2008-10-31 22:12:14 +0000 |
commit | eba717f95f586d2538007bd18da6e9b32b076c30 (patch) | |
tree | 15fc596a270f9de0d163c66c96e3c65fca5ee100 /kohana/helpers/download.php | |
parent | fff10f8b70376ef25722bd867df26bc5aefced43 (diff) |
Merge over vendor code.
git-svn-id: http://gallery.svn.sourceforge.net/svnroot/gallery/trunk/eval/gx/gallery3/trunk@18408 57fcd75e-5312-0410-8df3-f5eb6fbb1595
Diffstat (limited to 'kohana/helpers/download.php')
-rw-r--r-- | kohana/helpers/download.php | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/kohana/helpers/download.php b/kohana/helpers/download.php new file mode 100644 index 00000000..9151208f --- /dev/null +++ b/kohana/helpers/download.php @@ -0,0 +1,105 @@ +<?php defined('SYSPATH') or die('No direct script access.'); +/** + * Download helper class. + * + * $Id$ + * + * @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 |