diff --git a/src/Composer/Command/DiagnoseCommand.php b/src/Composer/Command/DiagnoseCommand.php
index a288109c7..f0bab63a7 100644
--- a/src/Composer/Command/DiagnoseCommand.php
+++ b/src/Composer/Command/DiagnoseCommand.php
@@ -177,17 +177,12 @@ EOT
$finder = new ExecutableFinder;
$hasSystemUnzip = (bool) $finder->find('unzip');
- if (Platform::isWindows()) {
- $hasSystem7zip = (bool) $finder->find('7z', null, array('C:\Program Files\7-Zip'));
- $windows7z = ', ' . ($hasSystem7zip ? '7-Zip present' : '7-Zip not available');
- } else {
- $windows7z = '';
- }
+ $hasSystem7zip = (bool) $finder->find('7z', null, array('C:\Program Files\7-Zip'));
$io->write(
'zip: ' . (extension_loaded('zip') ? 'extension present' : 'extension not loaded')
. ', ' . ($hasSystemUnzip ? 'unzip present' : 'unzip not available')
- . $windows7z
+ . ', ' . ($hasSystem7zip ? '7-Zip present' : '7-Zip not available')
);
return $this->exitCode;
diff --git a/src/Composer/Downloader/ZipDownloader.php b/src/Composer/Downloader/ZipDownloader.php
index 4475c5e8f..fd0b93a4a 100644
--- a/src/Composer/Downloader/ZipDownloader.php
+++ b/src/Composer/Downloader/ZipDownloader.php
@@ -46,6 +46,9 @@ class ZipDownloader extends ArchiveDownloader
if ($cmd = $finder->find('unzip')) {
self::$unzipCommands[] = array('unzip', ProcessExecutor::escape($cmd).' -qq %s -d %s');
}
+ if (!Platform::isWindows() && ($cmd = $finder->find('7z'))) { // 7z linux/macOS support is only used if unzip is not present
+ self::$unzipCommands[] = array('7z', ProcessExecutor::escape($cmd).' x -bb0 -y %s -o%s');
+ }
}
if (null === self::$hasZipArchive) {