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; | |
} | |
} |