Function Reference: fetch_remote_file
Summary
Move Images from a remote url to upload directory.
Package
GeoDirectory
Parameters
- $url
- (string) (required) The remote image url.
- Default: None
Return Values
- (array|WP_Error)
- The uploaded data as array.
- When failure returns error.
Change Log
Since: 1.0.0
Source File
fetch_remote_file() is located in geodirectory-functions/general_functions.php [Line: 1651]
Source Code
function fetch_remote_file( $url ) { // extract the file name and extension from the url require_once( ABSPATH . 'wp-includes/pluggable.php' ); $file_name = basename( $url ); if ( strpos( $file_name, '?' ) !== false ) { list( $file_name ) = explode( '?', $file_name ); } $dummy = false; $add_to_cache = false; $key = null; if ( strpos( $url, '/dummy/' ) !== false ) { $dummy = true; $key = "dummy_" . str_replace( '.', '_', $file_name ); $value = get_transient( 'cached_dummy_images' ); if ( $value ) { if ( isset( $value[ $key ] ) ) { return $value[ $key ]; } else { $add_to_cache = true; } } else { $add_to_cache = true; } } // get placeholder file in the upload dir with a unique, sanitized filename $post_upload_date = isset( $post['upload_date'] ) ? $post['upload_date'] : ''; $upload = wp_upload_bits( $file_name, 0, '', $post_upload_date ); if ( $upload['error'] ) { return new WP_Error( 'upload_dir_error', $upload['error'] ); } sleep( 0.3 );// if multiple remote file this can cause the remote server to timeout so we add a slight delay // fetch the remote url and write it to the placeholder file $headers = wp_remote_get( $url, array( 'stream' => true, 'filename' => $upload['file'] ) ); $log_message = ''; if ( is_wp_error( $headers ) ) { echo 'file: ' . $url; return new WP_Error( 'import_file_error', $headers->get_error_message() ); } // clear cache to make compat with EWWW Image Optimizer if(defined( 'EWWW_IMAGE_OPTIMIZER_PLUGIN_FILE')){ clearstatcache(); } $filesize = filesize( $upload['file'] ); // request failed if ( ! $headers ) { $log_message = __( 'Remote server did not respond', 'geodirectory' ); } // make sure the fetch was successful elseif ( $headers['response']['code'] != '200' ) { $log_message = sprintf( __( 'Remote server returned error response %1$d %2$s', 'geodirectory' ), esc_html( $headers['response'] ), get_status_header_desc( $headers['response'] ) ); } elseif ( isset( $headers['headers']['content-length'] ) && $filesize != $headers['headers']['content-length'] ) { $log_message = __( 'Remote file is incorrect size', 'geodirectory' ); } elseif ( 0 == $filesize ) { $log_message = __( 'Zero size file downloaded', 'geodirectory' ); } if ( $log_message ) { $del = unlink( $upload['file'] ); if ( ! $del ) { geodir_error_log( __( 'GeoDirectory: fetch_remote_file() failed to delete temp file.', 'geodirectory' ) ); } return new WP_Error( 'import_file_error', $log_message ); } if ( $dummy && $add_to_cache && is_array( $upload ) ) { $images = get_transient( 'cached_dummy_images' ); if ( is_array( $images ) ) { $images[ $key ] = $upload; } else { $images = array( $key => $upload ); } //setting the cache using the WP Transient API set_transient( 'cached_dummy_images', $images, 60 * 10 ); //10 minutes cache } return $upload; }