Title: WP_SimplePie_File
Published: April 25, 2014
Last modified: February 24, 2026

---

# class WP_SimplePie_File {}

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#description)
 * [Methods](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#source)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#wp--skip-link--target)

Core class for fetching remote files and reading local files with SimplePie.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#description)󠁿

This uses Core’s HTTP API to make requests, which gives plugins the ability to hook
into the process.

## 󠀁[Methods](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#methods)󠁿

| Name | Description | 
| [WP_SimplePie_File::__construct](https://developer.wordpress.org/reference/classes/wp_simplepie_file/__construct/) | Constructor. |

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#source)󠁿

    ```php
    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 );

    				if ( $this->headers instanceof \WpOrg\Requests\Utility\CaseInsensitiveDictionary ) {
    					$this->headers = $this->headers->getAll();
    				}

    				/*
    				 * 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;
    		}
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-simplepie-file.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/class-wp-simplepie-file.php#L19)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-simplepie-file.php#L19-L112)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_simplepie_file/?output_format=md#changelog)󠁿

| Version | Description | 
| [2.8.0](https://developer.wordpress.org/reference/since/2.8.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_simplepie_file%2F)
before being able to contribute a note or feedback.