note 106999 added to function.fread
| From: | andrej dot frelih at gmail dot com | Date: | Tue, 27 Dec 2011 12:35:52 +0000 |
| Subject: | note 106999 added to function.fread | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-185246@lists.php.net to get a copy of this message | ||
Another sample function that supports from/to range requests:
function download_file($file_name) {
if (!file_exists($file_name)) { die("<b>404 File not found!</b>"); }
$file_extension = strtolower(substr(strrchr($file_name,"."),1));
$file_size = filesize($file_name);
$md5_sum = md5_file($file_name);
//This will set the Content-Type to the appropriate setting for the file
switch($file_extension) {
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "mp3": $ctype="audio/mpeg"; break;
case "mpg":$ctype="video/mpeg"; break;
case "avi": $ctype="video/x-msvideo"; break;
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php
files)
case "php":
case "htm":
case "html":
case "txt": die("<b>Cannot be used for ". $file_extension ."
files!</b>"); break;
default: $ctype="application/force-download";
}
if (isset($_SERVER['HTTP_RANGE'])) {
$partial_content = true;
$range = explode("-", $_SERVER['HTTP_RANGE']);
$offset = intval($range[0]);
$length = intval($range[1]) - $offset;
}
else {
$partial_content = false;
$offset = 0;
$length = $file_size;
}
//read the data from the file
$handle = fopen($file_name, 'r');
$buffer = '';
fseek($handle, $offset);
$buffer = fread($handle, $length);
$md5_sum = md5($buffer);
if ($partial_content) $data_size = intval($range[1]) - intval($range[0]);
else $data_size = $file_size;
fclose($handle);
// send the headers and data
header("Content-Length: " . $data_size);
header("Content-md5: " . $md5_sum);
header("Accept-Ranges: bytes");
if ($partial_content) header('Content-Range: bytes ' . $offset . '-' .
($offset + $length) . '/' . $file_size);
header("Connection: close");
header("Content-type: " . $ctype);
header('Content-Disposition: attachment; filename=' . $file_name);
echo $buffer;
flush();
}
----
Server IP: 192.35.244.50
Probable Submitter: 178.188.53.114
----
Manual Page -- http://www.php.net/manual/en/function.fread.php
Edit -- https://master.php.net/note/edit/106999
Del: integrated -- https://master.php.net/note/delete/106999/integrated
Del: useless -- https://master.php.net/note/delete/106999/useless
Del: bad code -- https://master.php.net/note/delete/106999/bad+code
Del: spam -- https://master.php.net/note/delete/106999/spam
Del: non-english -- https://master.php.net/note/delete/106999/non-english
Del: in docs -- https://master.php.net/note/delete/106999/in+docs
Del: other reasons-- https://master.php.net/note/delete/106999
Reject -- https://master.php.net/note/reject/106999
Search -- https://master.php.net/manage/user-notes.php