1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-16 14:46:28 +02:00
Files
build
git-tools
phpBB
adm
assets
bin
cache
config
develop
docs
download
ext
files
images
includes
install
language
phpbb
auth
avatar
cache
captcha
config
console
controller
cron
db
di
event
exception
extension
feed
filesystem
groupposition
help
hook
language
lock
log
message
mimetype
notification
passwords
php
plupload
profilefields
report
request
routing
search
template
textformatter
tree
class_loader.php
composer.json
config_php_file.php
content_visibility.php
datetime.php
error_collector.php
file_downloader.php
filesystem.php
finder.php
json_response.php
pagination.php
path_helper.php
permissions.php
recursive_dot_prefix_filter_iterator.php
session.php
symfony_request.php
user.php
user_loader.php
version_helper.php
viewonline_helper.php
store
styles
.htaccess
app.php
common.php
composer.json
composer.lock
cron.php
faq.php
feed.php
index.php
mcp.php
memberlist.php
posting.php
report.php
search.php
ucp.php
viewforum.php
viewonline.php
viewtopic.php
web.config
tests
travis
.editorconfig
.gitignore
.travis.yml
CONTRIBUTING.md
README.md
composer.phar
phpunit.xml.dist
php-phpbb/phpBB/phpbb/file_downloader.php
2015-02-07 13:50:08 +01:00

121 lines
2.7 KiB
PHP

<?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($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;
}
}