From 2fb451c87241b5dfb44b45129978e1bb9b971a26 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Thu, 15 Oct 2009 17:55:55 +0000 Subject: - Patch #604618 by Crell, JacobSingh: create a common interface for Archive operations so we can handle .zip, .tar.gz. --- includes/archiver.inc | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ includes/common.inc | 50 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 includes/archiver.inc (limited to 'includes') diff --git a/includes/archiver.inc b/includes/archiver.inc new file mode 100644 index 000000000..8d514794a --- /dev/null +++ b/includes/archiver.inc @@ -0,0 +1,67 @@ +data; + } + } + + return $archiver_info; +} + +/** + * Create the appropriate archiver for the specified file. + * + * @param $file + * The full path of the archive file. Note that stream wrapper + * paths are supported. + * @return + * A newly created instance of the archiver class appropriate + * for the specified file, already bound to that file. + */ +function archiver_get_archiver($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($file, '.' . $extension) === strlen($file) - strlen('.' . $extension)) { + return new $implementation['class']($file); + } + } + } +} + -- cgit v1.2.3