diff options
Diffstat (limited to 'vendor/simplepie/simplepie/src/File.php')
-rw-r--r-- | vendor/simplepie/simplepie/src/File.php | 218 |
1 files changed, 9 insertions, 209 deletions
diff --git a/vendor/simplepie/simplepie/src/File.php b/vendor/simplepie/simplepie/src/File.php index 597661652..25d3f7300 100644 --- a/vendor/simplepie/simplepie/src/File.php +++ b/vendor/simplepie/simplepie/src/File.php @@ -5,7 +5,10 @@ * A PHP-Based RSS and Atom Feed Framework. * Takes the hard work out of managing a complete RSS/Atom solution. * - * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors + * Please note: This file is automatically generated by a build script. The + * full original source is always available from http://simplepie.org/ + * + * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are @@ -43,213 +46,10 @@ namespace SimplePie; -/** - * Used for fetching remote files and reading local files - * - * Supports HTTP 1.0 via cURL or fsockopen, with spotty HTTP 1.1 support - * - * This class can be overloaded with {@see \SimplePie\SimplePie::set_file_class()} - * - * @package SimplePie - * @subpackage HTTP - * @todo Move to properly supporting RFC2616 (HTTP/1.1) - */ -class File -{ - public $url; - public $useragent; - public $success = true; - public $headers = []; - public $body; - public $status_code = 0; - public $redirects = 0; - public $error; - public $method = \SimplePie\SimplePie::FILE_SOURCE_NONE; - public $permanent_url; - - public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false, $curl_options = []) - { - if (class_exists('idna_convert')) { - $idn = new \idna_convert(); - $parsed = \SimplePie\Misc::parse_url($url); - $url = \SimplePie\Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], null); - } - $this->url = $url; - $this->permanent_url = $url; - $this->useragent = $useragent; - if (preg_match('/^http(s)?:\/\//i', $url)) { - if ($useragent === null) { - $useragent = ini_get('user_agent'); - $this->useragent = $useragent; - } - if (!is_array($headers)) { - $headers = []; - } - if (!$force_fsockopen && function_exists('curl_exec')) { - $this->method = \SimplePie\SimplePie::FILE_SOURCE_REMOTE | \SimplePie\SimplePie::FILE_SOURCE_CURL; - $fp = curl_init(); - $headers2 = []; - foreach ($headers as $key => $value) { - $headers2[] = "$key: $value"; - } - if (version_compare(\SimplePie\Misc::get_curl_version(), '7.10.5', '>=')) { - curl_setopt($fp, CURLOPT_ENCODING, ''); - } - curl_setopt($fp, CURLOPT_URL, $url); - curl_setopt($fp, CURLOPT_HEADER, 1); - curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($fp, CURLOPT_FAILONERROR, 1); - curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_REFERER, \SimplePie\Misc::url_remove_credentials($url)); - curl_setopt($fp, CURLOPT_USERAGENT, $useragent); - curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); - foreach ($curl_options as $curl_param => $curl_value) { - curl_setopt($fp, $curl_param, $curl_value); - } - - $this->headers = curl_exec($fp); - if (curl_errno($fp) === 23 || curl_errno($fp) === 61) { - curl_setopt($fp, CURLOPT_ENCODING, 'none'); - $this->headers = curl_exec($fp); - } - $this->status_code = curl_getinfo($fp, CURLINFO_HTTP_CODE); - if (curl_errno($fp)) { - $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); - $this->success = false; - } else { - // Use the updated url provided by curl_getinfo after any redirects. - if ($info = curl_getinfo($fp)) { - $this->url = $info['url']; - } - curl_close($fp); - $this->headers = \SimplePie\HTTP\Parser::prepareHeaders($this->headers, $info['redirect_count'] + 1); - $parser = new \SimplePie\HTTP\Parser($this->headers); - if ($parser->parse()) { - $this->headers = $parser->headers; - $this->body = trim($parser->body); - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, [300, 301, 302, 303, 307]) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) { - $this->redirects++; - $location = \SimplePie\Misc::absolutize_url($this->headers['location'], $url); - $previousStatusCode = $this->status_code; - $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen, $curl_options); - $this->permanent_url = ($previousStatusCode == 301) ? $location : $url; - return; - } - } - } - } else { - $this->method = \SimplePie\SimplePie::FILE_SOURCE_REMOTE | \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN; - $url_parts = parse_url($url); - $socket_host = $url_parts['host']; - if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') { - $socket_host = "ssl://$url_parts[host]"; - $url_parts['port'] = 443; - } - if (!isset($url_parts['port'])) { - $url_parts['port'] = 80; - } - $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout); - if (!$fp) { - $this->error = 'fsockopen error: ' . $errstr; - $this->success = false; - } else { - stream_set_timeout($fp, $timeout); - if (isset($url_parts['path'])) { - if (isset($url_parts['query'])) { - $get = "$url_parts[path]?$url_parts[query]"; - } else { - $get = $url_parts['path']; - } - } else { - $get = '/'; - } - $out = "GET $get HTTP/1.1\r\n"; - $out .= "Host: $url_parts[host]\r\n"; - $out .= "User-Agent: $useragent\r\n"; - if (extension_loaded('zlib')) { - $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; - } - - if (isset($url_parts['user']) && isset($url_parts['pass'])) { - $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n"; - } - foreach ($headers as $key => $value) { - $out .= "$key: $value\r\n"; - } - $out .= "Connection: Close\r\n\r\n"; - fwrite($fp, $out); - - $info = stream_get_meta_data($fp); +class_exists('SimplePie_File'); - $this->headers = ''; - while (!$info['eof'] && !$info['timed_out']) { - $this->headers .= fread($fp, 1160); - $info = stream_get_meta_data($fp); - } - if (!$info['timed_out']) { - $parser = new \SimplePie\HTTP\Parser($this->headers); - if ($parser->parse()) { - $this->headers = $parser->headers; - $this->body = $parser->body; - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, [300, 301, 302, 303, 307]) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) { - $this->redirects++; - $location = \SimplePie\Misc::absolutize_url($this->headers['location'], $url); - $previousStatusCode = $this->status_code; - $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen, $curl_options); - $this->permanent_url = ($previousStatusCode == 301) ? $location : $url; - return; - } - if (isset($this->headers['content-encoding'])) { - // Hey, we act dumb elsewhere, so let's do that here too - switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) { - case 'gzip': - case 'x-gzip': - $decoder = new \SimplePie\Gzdecode($this->body); - if (!$decoder->parse()) { - $this->error = 'Unable to decode HTTP "gzip" stream'; - $this->success = false; - } else { - $this->body = trim($decoder->data); - } - break; - - case 'deflate': - if (($decompressed = gzinflate($this->body)) !== false) { - $this->body = $decompressed; - } elseif (($decompressed = gzuncompress($this->body)) !== false) { - $this->body = $decompressed; - } elseif (function_exists('gzdecode') && ($decompressed = gzdecode($this->body)) !== false) { - $this->body = $decompressed; - } else { - $this->error = 'Unable to decode HTTP "deflate" stream'; - $this->success = false; - } - break; - - default: - $this->error = 'Unknown content coding'; - $this->success = false; - } - } - } - } else { - $this->error = 'fsocket timed out'; - $this->success = false; - } - fclose($fp); - } - } - } else { - $this->method = \SimplePie\SimplePie::FILE_SOURCE_LOCAL | \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS; - if (empty($url) || !($this->body = trim(file_get_contents($url)))) { - $this->error = 'file_get_contents could not read the file'; - $this->success = false; - } - } - } +if (\false) { + class File extends \SimplePie_File + { + } } - -class_alias('SimplePie\File', 'SimplePie_File'); |