docker-php-extension-installer/scripts/check-installed-extension.php

69 lines
2.1 KiB
PHP

<?php
$rc = 0;
$numTestedExtensions = 0;
$nameMap = [
'opcache' => 'Zend OPcache',
'apcu_bc' => 'apc',
'ioncube_loader' => 'ionCube Loader',
'saxon' => 'saxonc',
];
if (PHP_VERSION_ID < 70000) {
$nameMap['sodium'] = 'libsodium';
} else {
$nameMap['libsodium'] = 'sodium';
}
$testsDir = __DIR__ . '/tests';
function runTest($testFile)
{
$rc = -1;
passthru(escapeshellarg($testFile) . ' ' . PHP_VERSION_ID, $rc);
return $rc === 0;
}
for ($index = 1, $count = isset($argv) ? count($argv) : 0; $index < $count; $index++) {
$numTestedExtensions++;
$rcThis = 1;
$extension = $argv[$index];
if ($extension === '') {
fprintf(STDERR, "Missing extension handle.\n");
} else {
$extensionLowerCase = strtolower($extension);
if (isset($nameMap[$extensionLowerCase])) {
$extension = $nameMap[$extensionLowerCase];
}
if (!extension_loaded($extension)) {
fprintf(STDERR, sprintf("Extension not loaded: %s\n", $extension));
} else {
$testFile = "{$testsDir}/{$extensionLowerCase}";
if (is_file($testFile)) {
try {
if (runTest($testFile) === true) {
fprintf(STDOUT, sprintf("Extension tested successfully: %s\n", $extension));
$rcThis = 0;
} else {
fprintf(STDERR, sprintf("Extension test failed: %s\n", $extension));
}
} catch (Exception $x) {
fprintf(STDERR, sprintf("Extension test failed: %s (%s)\n", $extension, $x->getMessage()));
} catch (Throwable $x) {
fprintf(STDERR, sprintf("Extension test failed: %s (%s)\n", $extension, $x->getMessage()));
}
} else {
fprintf(STDOUT, sprintf("Extension correctly loaded: %s\n", $extension));
$rcThis = 0;
}
}
}
if ($rcThis !== 0) {
$rc = $rcThis;
}
}
if ($numTestedExtensions === 0) {
fprintf(STDERR, "No extension handles specified.\n");
$rc = 1;
}
exit($rc);