mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-22 09:07:59 +01:00
ed37f855ce
The most notable change in this update is that all code is now namespaced and uses PSR-4 classes, though there is a compatibility layer available for extenders using the older class names, so plugin or theme authors directly using SimplePie can decide for themselves when they want to change to using the namespaced names for SimplePie classes. Note: This commit includes additional fixes for PHP 8.4 compatibility ([https://github.com/simplepie/simplepie/pull/875 PR 875], [https://github.com/simplepie/simplepie/pull/888 PR 888]) from the `one-dot-eight` branch of SimplePie, which is expected to be [https://github.com/simplepie/simplepie/pull/886 released as SimplePie 1.8.1] soon. References: * [https://github.com/simplepie/simplepie/releases/tag/1.8.0 SimplePie 1.8.0 release notes] * [https://github.com/simplepie/simplepie/releases/tag/1.7.0 SimplePie 1.7.0 release notes] * [https://github.com/simplepie/simplepie/releases/tag/1.6.0 SimplePie 1.6.0 release notes] * [https://github.com/simplepie/simplepie/compare/1.5.8...1.8.0 Full list of changes in SimplePie 1.8.0] Follow-up to [47733], [49176], [52393], [52413]. Props jrf, peterwilsoncc, chaion07, cu121, markparnell, audrasjb, costdev, Presskopp, desrosj, faisal03, mukesh27, SergeyBiryukov. See #55604. Built from https://develop.svn.wordpress.org/trunk@59141 git-svn-id: http://core.svn.wordpress.org/trunk@58537 1a063a9b-81f0-0310-95a4-ce76da25c4cd
109 lines
3.3 KiB
PHP
109 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* Feed API: WP_SimplePie_File class
|
|
*
|
|
* @package WordPress
|
|
* @subpackage Feed
|
|
* @since 4.7.0
|
|
*/
|
|
|
|
/**
|
|
* Core class for fetching remote files and reading local files with SimplePie.
|
|
*
|
|
* This uses Core's HTTP API to make requests, which gives plugins the ability
|
|
* to hook into the process.
|
|
*
|
|
* @since 2.8.0
|
|
*/
|
|
#[AllowDynamicProperties]
|
|
class WP_SimplePie_File extends SimplePie\File {
|
|
|
|
/**
|
|
* Timeout.
|
|
*
|
|
* @var int How long the connection should stay open in seconds.
|
|
*/
|
|
public $timeout = 10;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @since 2.8.0
|
|
* @since 3.2.0 Updated to use a PHP5 constructor.
|
|
* @since 5.6.1 Multiple headers are concatenated into a comma-separated string,
|
|
* rather than remaining an array.
|
|
*
|
|
* @param string $url Remote file URL.
|
|
* @param int $timeout Optional. How long the connection should stay open in seconds.
|
|
* Default 10.
|
|
* @param int $redirects Optional. The number of allowed redirects. Default 5.
|
|
* @param string|array $headers Optional. Array or string of headers to send with the request.
|
|
* Default null.
|
|
* @param string $useragent Optional. User-agent value sent. Default null.
|
|
* @param bool $force_fsockopen Optional. Whether to force opening internet or unix domain socket
|
|
* connection or not. Default false.
|
|
*/
|
|
public function __construct( $url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false ) {
|
|
$this->url = $url;
|
|
$this->timeout = $timeout;
|
|
$this->redirects = $redirects;
|
|
$this->headers = $headers;
|
|
$this->useragent = $useragent;
|
|
|
|
$this->method = SimplePie\SimplePie::FILE_SOURCE_REMOTE;
|
|
|
|
if ( preg_match( '/^http(s)?:\/\//i', $url ) ) {
|
|
$args = array(
|
|
'timeout' => $this->timeout,
|
|
'redirection' => $this->redirects,
|
|
);
|
|
|
|
if ( ! empty( $this->headers ) ) {
|
|
$args['headers'] = $this->headers;
|
|
}
|
|
|
|
if ( SimplePie\Misc::get_default_useragent() !== $this->useragent ) { // Use default WP user agent unless custom has been specified.
|
|
$args['user-agent'] = $this->useragent;
|
|
}
|
|
|
|
$res = wp_safe_remote_request( $url, $args );
|
|
|
|
if ( is_wp_error( $res ) ) {
|
|
$this->error = 'WP HTTP Error: ' . $res->get_error_message();
|
|
$this->success = false;
|
|
|
|
} else {
|
|
$this->headers = wp_remote_retrieve_headers( $res );
|
|
|
|
/*
|
|
* SimplePie expects multiple headers to be stored as a comma-separated string,
|
|
* but `wp_remote_retrieve_headers()` returns them as an array, so they need
|
|
* to be converted.
|
|
*
|
|
* The only exception to that is the `content-type` header, which should ignore
|
|
* any previous values and only use the last one.
|
|
*
|
|
* @see SimplePie\HTTP\Parser::new_line().
|
|
*/
|
|
foreach ( $this->headers as $name => $value ) {
|
|
if ( ! is_array( $value ) ) {
|
|
continue;
|
|
}
|
|
|
|
if ( 'content-type' === $name ) {
|
|
$this->headers[ $name ] = array_pop( $value );
|
|
} else {
|
|
$this->headers[ $name ] = implode( ', ', $value );
|
|
}
|
|
}
|
|
|
|
$this->body = wp_remote_retrieve_body( $res );
|
|
$this->status_code = wp_remote_retrieve_response_code( $res );
|
|
}
|
|
} else {
|
|
$this->error = '';
|
|
$this->success = false;
|
|
}
|
|
}
|
|
}
|