function file_delete
Same name in other branches
- 8.9.x core/includes/file.inc \file_delete()
Deletes a file and its database record.
If the $force parameter is not TRUE, file_usage_list() will be called to determine if the file is being used by any modules. If the file is being used the delete will be canceled.
Parameters
$file: A file object.
$force: Boolean indicating that the file should be deleted even if the file is reported as in use by the file_usage table.
Return value
mixed TRUE for success, FALSE in the event of an error, or an array if the file is being used by any modules.
See also
Related topics
10 calls to file_delete()
- EntityCrudHookTestCase::testFileHooks in modules/
simpletest/ tests/ entity_crud_hook_test.test - Tests hook invocations for CRUD operations on files.
- FileDeleteTest::testInUse in modules/
simpletest/ tests/ file.test - Tries deleting a file that is in use.
- FileDeleteTest::testUnused in modules/
simpletest/ tests/ file.test - Tries deleting a normal file (as opposed to a directory, symlink, etc).
- FileDownloadTest::checkUrl in modules/
simpletest/ tests/ file.test - Download a file from the URL generated by file_create_url().
- file_field_delete_file in modules/
file/ file.field.inc - Decrements the usage count for a file and attempts to delete it.
File
-
includes/
file.inc, line 1317
Code
function file_delete(stdClass $file, $force = FALSE) {
if (!file_valid_uri($file->uri)) {
if (($realpath = drupal_realpath($file->uri)) !== FALSE) {
watchdog('file', 'File %file (%realpath) could not be deleted because it is not a valid URI. This may be caused by improper use of file_delete() or a missing stream wrapper.', array(
'%file' => $file->uri,
'%realpath' => $realpath,
));
}
else {
watchdog('file', 'File %file could not be deleted because it is not a valid URI. This may be caused by improper use of file_delete() or a missing stream wrapper.', array(
'%file' => $file->uri,
));
}
drupal_set_message(t('The specified file %file could not be deleted, because it is not a valid URI. More information is available in the system log.', array(
'%file' => $file->uri,
)), 'error');
return FALSE;
}
// If any module still has a usage entry in the file_usage table, the file
// will not be deleted, but file_delete() will return a populated array
// that tests as TRUE.
if (!$force && ($references = file_usage_list($file))) {
return $references;
}
// Let other modules clean up any references to the deleted file.
module_invoke_all('file_delete', $file);
module_invoke_all('entity_delete', $file, 'file');
// Make sure the file is deleted before removing its row from the
// database, so UIs can still find the file in the database.
if (file_unmanaged_delete($file->uri)) {
db_delete('file_managed')->condition('fid', $file->fid)
->execute();
db_delete('file_usage')->condition('fid', $file->fid)
->execute();
entity_get_controller('file')->resetCache();
return TRUE;
}
return FALSE;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.