summaryrefslogtreecommitdiff
path: root/system/helpers/download.php
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-05-27 15:11:53 -0700
committerBharat Mediratta <bharat@menalto.com>2009-05-27 15:11:53 -0700
commit12fe58d997d2066dc362fd393a18b4e5da190513 (patch)
tree3ad8e5afb77829e1541ec96d86785760d65c04ac /system/helpers/download.php
parent00f47d4ddddcd1902db817018dd79ac01bcc8e82 (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.php105
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