diff options
author | Bharat Mediratta <bharat@menalto.com> | 2008-12-15 08:56:18 +0000 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2008-12-15 08:56:18 +0000 |
commit | 3b35e8b91ce94c292b46a296d034542ac5f0f6da (patch) | |
tree | 7a1444b5e16475b66300be105b8fc39e5117c881 /kohana/helpers/download.php | |
parent | 628058b4ed5aefb543ceb6ca9d3b87828c66bef1 (diff) |
Refresh kohana from upstream svn trunk r3771.
During this process, remove a considerable number of files from kohana
that we will not be needing in Gallery3, including the following files
and directories:
kohana/application
kohana/example.htaccess
kohana/index.php
kohana/install.php
kohana/kohana.png
kohana/modules/archive
kohana/modules/auth
kohana/modules/flot
kohana/modules/gmaps
kohana/modules/kodoc
kohana/modules/payment
kohana/modules/smarty
kohana/modules/unit_test/i18n
kohana/modules/unit_test/tests/Example_Test.php
kohana/modules/unit_test/tests/Valid_Test.php
kohana/system/config/captcha.php
kohana/system/controllers/captcha.php
kohana/system/fonts
kohana/system/i18n
kohana/system/libraries/Calendar.php
kohana/system/libraries/Calendar_Event.php
kohana/system/libraries/Captcha.php
kohana/system/libraries/Tagcloud.php
kohana/system/vendor
kohana/system/views/pagination
kohana/system/views/kohana_calendar.php
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..038ee790 --- /dev/null +++ b/kohana/helpers/download.php @@ -0,0 +1,105 @@ +<?php defined('SYSPATH') OR die('No direct access allowed.'); +/** + * 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 |