Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
CRAP | |
89.47% |
34 / 38 |
| file_downloader | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
12.17 | |
89.47% |
34 / 38 |
| get | |
0.00% |
0 / 1 |
10.06 | |
91.67% |
33 / 36 |
|||
| get_error_string | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| get_error_number | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| <?php | |
| /** | |
| * | |
| * This file is part of the phpBB Forum Software package. | |
| * | |
| * @copyright (c) phpBB Limited <https://www.phpbb.com> | |
| * @license GNU General Public License, version 2 (GPL-2.0) | |
| * | |
| * For full copyright and license information, please see | |
| * the docs/CREDITS.txt file. | |
| * | |
| */ | |
| namespace phpbb; | |
| class file_downloader | |
| { | |
| /** @var string Error string */ | |
| protected $error_string = ''; | |
| /** @var int Error number */ | |
| protected $error_number = 0; | |
| /** | |
| * Retrieve contents from remotely stored file | |
| * | |
| * @param string $host File host | |
| * @param string $directory Directory file is in | |
| * @param string $filename Filename of file to retrieve | |
| * @param int $port Port to connect to; default: 80 | |
| * @param int $timeout Connection timeout in seconds; default: 6 | |
| * | |
| * @return mixed File data as string if file can be read and there is no | |
| * timeout, false if there were errors or the connection timed out | |
| * | |
| * @throws \phpbb\exception\runtime_exception If data can't be retrieved and no error | |
| * message is returned | |
| */ | |
| public function get($host, $directory, $filename, $port = 80, $timeout = 6) | |
| { | |
| // Set default values for error variables | |
| $this->error_number = 0; | |
| $this->error_string = ''; | |
| if ($socket = @fsockopen(($port == 443 ? 'ssl://' : '') . $host, $port, $this->error_number, $this->error_string, $timeout)) | |
| { | |
| @fputs($socket, "GET $directory/$filename HTTP/1.0\r\n"); | |
| @fputs($socket, "HOST: $host\r\n"); | |
| @fputs($socket, "Connection: close\r\n\r\n"); | |
| $timer_stop = time() + $timeout; | |
| stream_set_timeout($socket, $timeout); | |
| $file_info = ''; | |
| $get_info = false; | |
| while (!@feof($socket)) | |
| { | |
| if ($get_info) | |
| { | |
| $file_info .= @fread($socket, 1024); | |
| } | |
| else | |
| { | |
| $line = @fgets($socket, 1024); | |
| if ($line == "\r\n") | |
| { | |
| $get_info = true; | |
| } | |
| else if (stripos($line, '404 not found') !== false) | |
| { | |
| throw new \phpbb\exception\runtime_exception('FILE_NOT_FOUND', array($filename)); | |
| } | |
| } | |
| $stream_meta_data = stream_get_meta_data($socket); | |
| if (!empty($stream_meta_data['timed_out']) || time() >= $timer_stop) | |
| { | |
| throw new \phpbb\exception\runtime_exception('FSOCK_TIMEOUT'); | |
| } | |
| } | |
| @fclose($socket); | |
| } | |
| else | |
| { | |
| if ($this->error_string) | |
| { | |
| $this->error_string = utf8_convert_message($this->error_string); | |
| return false; | |
| } | |
| else | |
| { | |
| throw new \phpbb\exception\runtime_exception('FSOCK_DISABLED'); | |
| } | |
| } | |
| return $file_info; | |
| } | |
| /** | |
| * Get error string | |
| * | |
| * @return string Error string | |
| */ | |
| public function get_error_string() | |
| { | |
| return $this->error_string; | |
| } | |
| /** | |
| * Get error number | |
| * | |
| * @return int Error number | |
| */ | |
| public function get_error_number() | |
| { | |
| return $this->error_number; | |
| } | |
| } |