note 97842 added to function.readfile
| From: | joe dot lencioni at gmail dot com | Date: | Tue, 11 May 2010 20:17:38 +0000 |
| Subject: | note 97842 added to function.readfile | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-169159@lists.php.net to get a copy of this message | ||
I noticed some problems with the smartReadFile() function below. Here is an updated version that
works for me:
<?php
function smartReadFile($location, $filename, $mimeType = 'application/octet-stream')
{
if (!file_exists($location))
{
header ("HTTP/1.1 404 Not Found");
return;
}
$size = filesize($location);
$time = date('r', filemtime($location));
$fm = @fopen($location, 'rb');
if (!$fm)
{
header ("HTTP/1.1 505 Internal server error");
return;
}
$begin = 0;
$end = $size - 1;
if (isset($_SERVER['HTTP_RANGE']))
{
if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'],
$matches))
{
$begin = intval($matches[1]);
if (!empty($matches[2]))
$end = intval($matches[2]);
}
}
if ($begin > 0 || $end < $size)
header('HTTP/1.1 206 Partial Content');
else
header('HTTP/1.1 200 OK');
header("Content-Type: $mimeType");
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Accept-Ranges: bytes');
header('Content-Length:' . ($end - $begin) + 1);
header("Content-Range: bytes $begin-$end/$size");
header("Content-Disposition: inline; filename=$filename");
header("Content-Transfer-Encoding: binary\n");
header("Last-Modified: $time");
$cur = $begin;
fseek($fm, $begin, 0);
while(!feof($fm) && $cur < $end && (connection_status() == 0))
{
print fread($fm, min(1024 * 16, ($end + 1) - $cur));
$cur += 1024 * 16;
}
}
?>
Usage:
<?php
smartReadFile("/tmp/filename", "myfile.mp3", "audio/mpeg");
?>
----
Server IP: 69.147.83.197
Probable Submitter: 138.236.71.119
----
Manual Page -- http://www.php.net/manual/en/function.readfile.php
Edit -- https://master.php.net/note/edit/97842
Del: integrated -- https://master.php.net/note/delete/97842/integrated
Del: useless -- https://master.php.net/note/delete/97842/useless
Del: bad code -- https://master.php.net/note/delete/97842/bad+code
Del: spam -- https://master.php.net/note/delete/97842/spam
Del: non-english -- https://master.php.net/note/delete/97842/non-english
Del: in docs -- https://master.php.net/note/delete/97842/in+docs
Del: other reasons-- https://master.php.net/note/delete/97842
Reject -- https://master.php.net/note/reject/97842
Search -- https://master.php.net/manage/user-notes.php