move stream_file to its own function
This commit is contained in:
parent
1b4d06c8d2
commit
a5c7faeff7
4 changed files with 41 additions and 33 deletions
|
@ -368,8 +368,7 @@ class BasePage
|
||||||
header('Content-Disposition: ' . $this->disposition . '; filename=' . $this->filename);
|
header('Content-Disposition: ' . $this->disposition . '; filename=' . $this->filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
//https://gist.github.com/codler/3906826
|
// https://gist.github.com/codler/3906826
|
||||||
|
|
||||||
$size = filesize($this->file); // File size
|
$size = filesize($this->file); // File size
|
||||||
$length = $size; // Content length
|
$length = $size; // Content length
|
||||||
$start = 0; // Start byte
|
$start = 0; // Start byte
|
||||||
|
@ -379,7 +378,6 @@ class BasePage
|
||||||
header('Accept-Ranges: bytes');
|
header('Accept-Ranges: bytes');
|
||||||
|
|
||||||
if (isset($_SERVER['HTTP_RANGE'])) {
|
if (isset($_SERVER['HTTP_RANGE'])) {
|
||||||
$c_end = $end;
|
|
||||||
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
|
list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
|
||||||
if (strpos($range, ',') !== false) {
|
if (strpos($range, ',') !== false) {
|
||||||
header('HTTP/1.1 416 Requested Range Not Satisfiable');
|
header('HTTP/1.1 416 Requested Range Not Satisfiable');
|
||||||
|
@ -388,6 +386,7 @@ class BasePage
|
||||||
}
|
}
|
||||||
if ($range == '-') {
|
if ($range == '-') {
|
||||||
$c_start = $size - (int)substr($range, 1);
|
$c_start = $size - (int)substr($range, 1);
|
||||||
|
$c_end = $end;
|
||||||
} else {
|
} else {
|
||||||
$range = explode('-', $range);
|
$range = explode('-', $range);
|
||||||
$c_start = (int)$range[0];
|
$c_start = (int)$range[0];
|
||||||
|
@ -407,29 +406,7 @@ class BasePage
|
||||||
header("Content-Range: bytes $start-$end/$size");
|
header("Content-Range: bytes $start-$end/$size");
|
||||||
header("Content-Length: " . $length);
|
header("Content-Length: " . $length);
|
||||||
|
|
||||||
|
stream_file($this->file, $start, $end);
|
||||||
$fp = fopen($this->file, 'r');
|
|
||||||
try {
|
|
||||||
fseek($fp, $start);
|
|
||||||
$buffer = 1024 * 64;
|
|
||||||
while (!feof($fp) && ($p = ftell($fp)) <= $end) {
|
|
||||||
if ($p + $buffer > $end) {
|
|
||||||
$buffer = $end - $p + 1;
|
|
||||||
}
|
|
||||||
set_time_limit(0);
|
|
||||||
echo fread($fp, $buffer);
|
|
||||||
flush();
|
|
||||||
|
|
||||||
// After flush, we can tell if the client browser has disconnected.
|
|
||||||
// This means we can start sending a large file, and if we detect they disappeared
|
|
||||||
// then we can just stop and not waste any more resources or bandwidth.
|
|
||||||
if (connection_status() != 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
fclose($fp);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case PageMode::REDIRECT:
|
case PageMode::REDIRECT:
|
||||||
if ($this->flash) {
|
if ($this->flash) {
|
||||||
|
@ -544,7 +521,8 @@ class BasePage
|
||||||
EOD;
|
EOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function head_html(): string {
|
protected function head_html(): string
|
||||||
|
{
|
||||||
$html_header_html = $this->get_all_html_headers();
|
$html_header_html = $this->get_all_html_headers();
|
||||||
|
|
||||||
return "
|
return "
|
||||||
|
@ -555,7 +533,8 @@ EOD;
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function body_html(): string {
|
protected function body_html(): string
|
||||||
|
{
|
||||||
$left_block_html = "";
|
$left_block_html = "";
|
||||||
$main_block_html = "";
|
$main_block_html = "";
|
||||||
$sub_block_html = "";
|
$sub_block_html = "";
|
||||||
|
@ -604,7 +583,8 @@ EOD;
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function footer_html(): string {
|
protected function footer_html(): string
|
||||||
|
{
|
||||||
$debug = get_debug_info();
|
$debug = get_debug_info();
|
||||||
$contact_link = contact_link();
|
$contact_link = contact_link();
|
||||||
$contact = empty($contact_link) ? "" : "<br><a href='$contact_link'>Contact</a>";
|
$contact = empty($contact_link) ? "" : "<br><a href='$contact_link'>Contact</a>";
|
||||||
|
@ -711,7 +691,6 @@ class NavLink
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function sort_nav_links(NavLink $a, NavLink $b)
|
function sort_nav_links(NavLink $a, NavLink $b)
|
||||||
|
|
|
@ -150,6 +150,32 @@ function list_files(string $base, string $_sub_dir=""): array
|
||||||
return $file_list;
|
return $file_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function stream_file(string $file, int $start, int $end): void
|
||||||
|
{
|
||||||
|
$fp = fopen($file, 'r');
|
||||||
|
try {
|
||||||
|
set_time_limit(0);
|
||||||
|
fseek($fp, $start);
|
||||||
|
$buffer = 1024 * 64;
|
||||||
|
while (!feof($fp) && ($p = ftell($fp)) <= $end) {
|
||||||
|
if ($p + $buffer > $end) {
|
||||||
|
$buffer = $end - $p + 1;
|
||||||
|
}
|
||||||
|
echo fread($fp, $buffer);
|
||||||
|
flush();
|
||||||
|
|
||||||
|
// After flush, we can tell if the client browser has disconnected.
|
||||||
|
// This means we can start sending a large file, and if we detect they disappeared
|
||||||
|
// then we can just stop and not waste any more resources or bandwidth.
|
||||||
|
if (connection_status() != 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!function_exists('http_parse_headers')) { #http://www.php.net/manual/en/function.http-parse-headers.php#112917
|
if (!function_exists('http_parse_headers')) { #http://www.php.net/manual/en/function.http-parse-headers.php#112917
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -47,8 +47,11 @@ class SVGFileHandler extends DataHandlerExtension
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
// Normally we require imagemagick, but for unit tests we can use a no-op engine
|
// Normally we require imagemagick, but for unit tests we can use a no-op engine
|
||||||
if(defined('UNITTEST')) create_image_thumb($hash, $type);
|
if (defined('UNITTEST')) {
|
||||||
else create_image_thumb($hash, $type, MediaEngine::IMAGICK);
|
create_image_thumb($hash, $type);
|
||||||
|
} else {
|
||||||
|
create_image_thumb($hash, $type, MediaEngine::IMAGICK);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
} catch (MediaException $e) {
|
} catch (MediaException $e) {
|
||||||
log_warning("handle_svg", "Could not generate thumbnail. " . $e->getMessage());
|
log_warning("handle_svg", "Could not generate thumbnail. " . $e->getMessage());
|
||||||
|
|
|
@ -34,7 +34,7 @@ class CustomHomeTheme extends HomeTheme
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
EOD
|
EOD
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function build_body(string $sitename, string $main_links, string $main_text, string $contact_link, $num_comma, string $counter_text)
|
public function build_body(string $sitename, string $main_links, string $main_text, string $contact_link, $num_comma, string $counter_text)
|
||||||
|
|
Reference in a new issue