function archiver_get_archiver

Same name 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 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.