function archiver_get_archiver
Same name in other branches
- 8.9.x core/includes/common.inc \archiver_get_archiver()
Creates the appropriate archiver for the specified file.
Parameters
$file: The full path of the archive file. Note that stream wrapper paths are supported, but not remote ones.
Return value
A newly created instance of the archiver class appropriate for the specified file, already bound to that file. If no appropriate archiver class was found, will return FALSE.
3 calls to archiver_get_archiver()
- SystemArchiverTest::testArchiverTarball in modules/
system/ system.test - Tests interacting with a tarball archive.
- SystemArchiverTest::_testArchiverOutOfPath in modules/
system/ system.test - Helper to test out-of-path extraction protection.
- update_manager_archive_extract in modules/
update/ update.manager.inc - Unpacks a downloaded archive file.
File
-
includes/
common.inc, line 8574
Code
function archiver_get_archiver($file) {
// Archivers can only work on local paths
$filepath = drupal_realpath($file);
if (!is_file($filepath)) {
throw new Exception(t('Archivers can only operate on local files: %file not supported', array(
'%file' => $file,
)));
}
$archiver_info = archiver_get_info();
foreach ($archiver_info as $implementation) {
foreach ($implementation['extensions'] as $extension) {
// Because extensions may be multi-part, such as .tar.gz,
// we cannot use simpler approaches like substr() or pathinfo().
// This method isn't quite as clean but gets the job done.
// Also note that the file may not yet exist, so we cannot rely
// on fileinfo() or other disk-level utilities.
if (strrpos($filepath, '.' . $extension) === strlen($filepath) - strlen('.' . $extension)) {
return new $implementation['class']($filepath);
}
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.