A WordPress-centric search engine for devs and theme authors



download_url ›

Since2.5.0
Deprecatedn/a
download_url ( $url, $timeout = 300 )
Parameters: (2)
  • (string) $url the URL of the file to download
    Required: Yes
  • (int) $timeout The timeout for the request to download the file default 300 seconds
    Required: No
    Default: 300
Returns:
  • (mixed) WP_Error on failure, string Filename on success.
Defined at:
Codex:

Downloads a URL to a local temporary file using the WordPress HTTP Class.

Please note, That the calling function must unlink() the file.



Source

function download_url( $url, $timeout = 300 ) {
	//WARNING: The file is not automatically deleted, The script must unlink() the file.
	if ( ! $url ) {
		return new WP_Error( 'http_no_url', __( 'Invalid URL Provided.' ) );
	}

	$url_filename = basename( parse_url( $url, PHP_URL_PATH ) );

	$tmpfname = wp_tempnam( $url_filename );
	if ( ! $tmpfname ) {
		return new WP_Error( 'http_no_file', __( 'Could not create Temporary file.' ) );
	}

	$response = wp_safe_remote_get(
		$url, array(
			'timeout'  => $timeout,
			'stream'   => true,
			'filename' => $tmpfname,
		)
	);

	if ( is_wp_error( $response ) ) {
		unlink( $tmpfname );
		return $response;
	}

	if ( 200 != wp_remote_retrieve_response_code( $response ) ) {
		unlink( $tmpfname );
		return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ) );
	}

	$content_md5 = wp_remote_retrieve_header( $response, 'content-md5' );
	if ( $content_md5 ) {
		$md5_check = verify_file_md5( $tmpfname, $content_md5 );
		if ( is_wp_error( $md5_check ) ) {
			unlink( $tmpfname );
			return $md5_check;
		}
	}

	return $tmpfname;
}