move stream_file to its own function
This commit is contained in:
		
							parent
							
								
									1b4d06c8d2
								
							
						
					
					
						commit
						a5c7faeff7
					
				| @ -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) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user