summaryrefslogtreecommitdiff
path: root/kohana/helpers/download.php
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2008-10-31 22:12:14 +0000
committerBharat Mediratta <bharat@menalto.com>2008-10-31 22:12:14 +0000
commiteba717f95f586d2538007bd18da6e9b32b076c30 (patch)
tree15fc596a270f9de0d163c66c96e3c65fca5ee100 /kohana/helpers/download.php
parentfff10f8b70376ef25722bd867df26bc5aefced43 (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.php105
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