1. drupal
    1. 5
    2. 6
    3. 7
    4. 8
5 – 6 file_save_data($data, $dest, $replace = FILE_EXISTS_RENAME)
8 – 7 file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAME)

Save a string to the specified destination and create a database file entry.


$data A string containing the contents of the file.

$destination A string containing the destination URI. This must be a stream wrapper URI. If no value is provided, a randomized name will be generated and the file will be saved using Drupal's default files scheme, usually "public://".

$replace Replace behavior when the destination file already exists:

  • FILE_EXISTS_REPLACE - Replace the existing file. If a managed file with the destination name exists then its database entry will be updated. If no database entry is found then a new one will be created.
  • FILE_EXISTS_RENAME - Append _{incrementing number} until the filename is unique.
  • FILE_EXISTS_ERROR - Do nothing and return FALSE.

Return value

A file object, or FALSE on error.

See also


Related topics

▾ 9 functions call file_save_data()

CronRunTestCase::testTempFileCleanup in modules/system/system.test
Ensure that temporary files are removed.
FileSaveDataTest::testExistingError in modules/simpletest/tests/file.test
Test that file_save_data() fails overwriting an existing file.
FileSaveDataTest::testExistingRename in modules/simpletest/tests/file.test
Test file_save_data() when renaming around an existing file.
FileSaveDataTest::testExistingReplace in modules/simpletest/tests/file.test
Test file_save_data() when replacing an existing file.
FileSaveDataTest::testWithFilename in modules/simpletest/tests/file.test
Test the file_save_data() function when a filename is provided.
FileSaveDataTest::testWithoutFilename in modules/simpletest/tests/file.test
Test the file_save_data() function when no filename is provided.
file_example_managed_write_submit in examples/file_example/file_example.module
Submit handler to write a managed file.
RegistryParseFilesTestCase::setUp in modules/simpletest/tests/registry.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
system_retrieve_file in modules/system/system.module
Attempts to get a file using drupal_http_request and to store it locally.


includes/, line 1827

function file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAME) {
  global $user;

  if (empty($destination)) {
    $destination = file_default_scheme() . '://';
  if (!file_valid_uri($destination)) {
    watchdog('file', 'The data could not be saved because the destination %destination is invalid. This may be caused by improper use of file_save_data() or a missing stream wrapper.', array('%destination' => $destination));
    drupal_set_message(t('The data could not be saved, because the destination is invalid. More information is available in the system log.'), 'error');
    return FALSE;

  if ($uri = file_unmanaged_save_data($data, $destination, $replace)) {
    // Create a file object.
    $file = new stdClass();
    $file->fid = NULL;
    $file->uri = $uri;
    $file->filename = basename($uri);
    $file->filemime = file_get_mimetype($file->uri);
    $file->uid      = $user->uid;
    $file->status   = FILE_STATUS_PERMANENT;
    // If we are replacing an existing file re-use its database record.
    if ($replace == FILE_EXISTS_REPLACE) {
      $existing_files = file_load_multiple(array(), array('uri' => $uri));
      if (count($existing_files)) {
        $existing = reset($existing_files);
        $file->fid = $existing->fid;
        $file->filename = $existing->filename;
    // If we are renaming around an existing file (rather than a directory),
    // use its basename for the filename.
    elseif ($replace == FILE_EXISTS_RENAME && is_file($destination)) {
      $file->filename = basename($destination);

    return file_save($file);
  return FALSE;