function update_manager_archive_extract
Same name in other branches
- 9 core/modules/update/update.manager.inc \update_manager_archive_extract()
- 8.9.x core/modules/update/update.manager.inc \update_manager_archive_extract()
- 10 core/modules/update/update.manager.inc \update_manager_archive_extract()
- 11.x core/modules/update/update.manager.inc \update_manager_archive_extract()
Unpacks a downloaded archive file.
Parameters
string $file: The filename of the archive you wish to extract.
string $directory: The directory you wish to extract the archive into.
Return value
Archiver The Archiver object used to extract the archive.
Throws
Exception
Related topics
2 calls to update_manager_archive_extract()
- update_manager_batch_project_get in modules/
update/ update.manager.inc - Implements callback_batch_operation().
- update_manager_install_form_submit in modules/
update/ update.manager.inc - Form submission handler for update_manager_install_form().
File
-
modules/
update/ update.manager.inc, line 775
Code
function update_manager_archive_extract($file, $directory) {
$archiver = archiver_get_archiver($file);
if (!$archiver) {
throw new Exception(t('Cannot extract %file, not a valid archive.', array(
'%file' => $file,
)));
}
// Remove the directory if it exists, otherwise it might contain a mixture of
// old files mixed with the new files (e.g. in cases where files were removed
// from a later release).
$files = $archiver->listContents();
// Unfortunately, we can only use the directory name to determine the project
// name. Some archivers list the first file as the directory (i.e., MODULE/)
// and others list an actual file (i.e., MODULE/README.TXT).
$project = strtok($files[0], '/\\');
$extract_location = $directory . '/' . $project;
if (file_exists($extract_location)) {
file_unmanaged_delete_recursive($extract_location);
}
$archiver->extract($directory);
return $archiver;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.