Error message

You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).

function archiver_get_archiver

Same name and namespace in other branches
  1. 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 8614

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.