system_retrieve_file($url, $destination = NULL, $managed = FALSE, $replace = FILE_EXISTS_RENAME)
Attempts to get a file using Guzzle HTTP client and to store it locally.
Parameters
string $url: The URL of the file to grab.
string $destination: Stream wrapper URI specifying where the file should be placed. If a directory path is provided, the file is saved into that directory under its original name. If the path contains a filename as well, that one will be used instead. If this value is omitted, the site's default files scheme will be used, usually "public://".
bool $managed: If this is set to TRUE, the file API hooks will be invoked and the file is registered in the database.
int $replace: Replace behavior when the destination file already exists:
- FILE_EXISTS_REPLACE: Replace the existing file.
- FILE_EXISTS_RENAME: Append _{incrementing number} until the filename is unique.
- FILE_EXISTS_ERROR: Do nothing and return FALSE.
Return value
mixed One of these possibilities:
- If it succeeds and $managed is FALSE, the location where the file was saved.
- If it succeeds and $managed is TRUE, a \Drupal\file\FileInterface object which describes the file.
- If it fails, FALSE.
File
- core/modules/system/system.module, line 1371
- Configuration system that lets administrators modify the workings of the site.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function system_retrieve_file( $url , $destination = NULL, $managed = FALSE, $replace = FILE_EXISTS_RENAME) { $parsed_url = parse_url ( $url ); if (!isset( $destination )) { $path = file_build_uri(drupal_basename( $parsed_url [ 'path' ])); } else { if ( is_dir (drupal_realpath( $destination ))) { // Prevent URIs with triple slashes when glueing parts together. $path = str_replace ( '///' , '//' , "$destination/" ) . drupal_basename( $parsed_url [ 'path' ]); } else { $path = $destination ; } } try { $data = (string) \Drupal::httpClient() ->get( $url ) ->getBody(); $local = $managed ? file_save_data( $data , $path , $replace ) : file_unmanaged_save_data( $data , $path , $replace ); } catch (RequestException $exception ) { drupal_set_message(t( 'Failed to fetch file due to error "%error"' , array ( '%error' => $exception ->getMessage())), 'error' ); return FALSE; } if (! $local ) { drupal_set_message(t( '@remote could not be saved to @path.' , array ( '@remote' => $url , '@path' => $path )), 'error' ); } return $local ; } |
Please login to continue.