[
'de' => 'PHP',
'en' => 'PHP Requirements',
],
'php_version_success' => [
'de' => 'PHP-Version %s',
'en' => 'PHP version %s',
],
'php_version_failure' => [
'de' => 'Gefundene PHP-Version %s ist inkompatibel. PHP %s – %s wird benötigt.',
'en' => 'PHP version %s is incompatible. PHP %s – %s is required.',
],
'php_x64_success' => [
'de' => '64-Bit-Unterstützung',
'en' => '64-bit Support',
],
'php_x64_failure' => [
'de' => '64-Bit-Unterstützung fehlt',
'en' => '64-bit support missing',
],
'php_extension_success' => [
'de' => 'Erweiterung %s vorhanden',
'en' => '%s extension loaded',
],
'php_extension_failure' => [
'de' => 'Erweiterung %s fehlt',
'en' => '%s extension missing',
],
'php_extension_gd_or_imagick_failure' => [
'de' => 'Erweiterung für Bildverarbeitung (GD oder Imagick) fehlt',
'en' => 'Extension for image processing (GD or Imagick) missing',
],
'php_extension_gd_or_imagick_webp_failure' => [
'de' => 'Unterstützung für WebP-Grafiken in %s fehlt',
'en' => 'Support for WebP images in %s missing',
],
'php_memory_limit_success' => [
'de' => 'Arbeitsspeicher-Limit %s',
'en' => '%s memory limit',
],
'php_memory_limit_failure' => [
'de' => 'Arbeitsspeicher-Limit %s ist nicht ausreichend. 128 MiB oder mehr wird benötigt.',
'en' => 'Memory limit %s is too low. It needs to be set to 128 MiB or more.',
],
'php_opcache_failure' => [
'de' => 'OPcache ist aktiviert, aber die erforderlichen Verwaltungsfunktionen (opcache_reset, opcache_invalidate) sind deaktiviert.',
'en' => 'OPcache is enabled but the required management functions (opcache_reset, opcache_invalidate) are disabled.',
],
'mysql_requirements' => [
'de' => 'MySQL',
'en' => 'MySQL Requirements',
],
'mysql_version' => [
'de' => 'Bitte stellen Sie sicher, dass MySQL 8.0.30+ oder MariaDB 10.5.15+ mit InnoDB-Unterstützung vorhanden ist.',
'en' => 'Please make sure that MySQL 8.0.30+ or MariaDB 10.5.15+, with InnoDB support is available.',
],
'result' => [
'de' => 'Ergebnis',
'en' => 'Summary',
],
'result_success' => [
'de' => 'Alle Systemvoraussetzungen sind erfüllt. Sie können die Installation von WoltLab Suite beginnen.',
'en' => 'Your system fulfills all of WoltLab Suite\'s system requirements. You are ready to install WoltLab Suite!',
],
'result_failure' => [
'de' => 'Die Systemvoraussetzungen sind nicht erfüllt. Bitte beachten Sie die oben genannten Informationen. Wenden Sie sich ggf. an Ihren Webhoster oder Ihren Serveradministrator.',
'en' => 'The system requirements are not met. Please note the above information and contact your web host or server administrator if necessary.',
],
'button_start_installation' => [
'de' => 'Installation starten',
'en' => 'Start Installation',
],
];
function getPhrase($phrase, array $values = [])
{
global $language, $phrases;
if (!isset($phrases[$phrase]) || !isset($phrases[$phrase][$language])) {
return "[unknown:{$phrase}]";
}
return \vsprintf($phrases[$phrase][$language], $values);
}
function checkPHPVersion()
{
global $phpVersionLowerBound, $phpVersionUpperBound;
$comparePhpVersion = \preg_replace('/^(\d+\.\d+\.\d+).*$/', '\\1', \PHP_VERSION);
return \version_compare($comparePhpVersion, $phpVersionLowerBound, '>=')
&& \version_compare($comparePhpVersion, \str_replace('x', '999', $phpVersionUpperBound), '<=');
}
function getMemoryLimit()
{
$memoryLimit = \ini_get('memory_limit');
// no limit
if ($memoryLimit == "-1") {
return -1;
} else if (\function_exists('ini_parse_quantity')) {
return \ini_parse_quantity($memoryLimit);
} else {
// completely numeric, PHP assumes byte
if (\is_numeric($memoryLimit)) {
return $memoryLimit;
}
// PHP supports 'K', 'M' and 'G' shorthand notation
if (\preg_match('~^(\d+)\s*([KMG])$~i', $memoryLimit, $matches)) {
switch (\strtoupper($matches[2])) {
case 'K':
return $matches[1] * 1024;
case 'M':
return $matches[1] * 1024 * 1024;
case 'G':
return $matches[1] * 1024 * 1024 * 1024;
}
}
}
return 0;
}
function checkMemoryLimit()
{
$memoryLimit = getMemoryLimit();
return $memoryLimit == -1 || $memoryLimit >= 128 * 1024 * 1024;
}
function checkX64()
{
return \PHP_INT_SIZE == 8;
}
function formatFilesizeBinary($byte): string
{
$symbol = 'Byte';
if ($byte >= 1024) {
$byte /= 1024;
$symbol = 'KiB';
}
if ($byte >= 1024) {
$byte /= 1024;
$symbol = 'MiB';
}
if ($byte >= 1024) {
$byte /= 1024;
$symbol = 'GiB';
}
if ($byte >= 1024) {
$byte /= 1024;
$symbol = 'TiB';
}
return \floor($byte) . ' ' . $symbol;
}
function checkResult()
{
global $requiredExtensions;
if (!checkPHPVersion() || !checkX64() || !checkMemoryLimit() || !checkOpcache()) {
return false;
}
foreach ($requiredExtensions as $extension) {
if (!\extension_loaded($extension)) {
return false;
}
}
$hasSufficientImageLibrary = false;
if (\extension_loaded('imagick') && \in_array('WEBP', \Imagick::queryFormats())) {
$hasSufficientImageLibrary = true;
}
if (\extension_loaded('gd') && !empty(\gd_info()['WebP Support'])) {
$hasSufficientImageLibrary = true;
}
if (!$hasSufficientImageLibrary) {
return false;
}
return true;
}
function checkInstallFile()
{
return @\file_exists('install.php');
}
function checkOpcache()
{
if (\extension_loaded('Zend Opcache') && \ini_get('opcache.enable')) {
if (!\function_exists('\opcache_reset') || !\function_exists('\opcache_invalidate')) {
return false;
}
}
return true;
}
?>
WoltLab Suite System Requirements Test
WoltLab Suite System Requirements Test
=getPhrase('php_requirements')?>
- =getPhrase('php_version_success', [\PHP_VERSION])?>
- =getPhrase('php_x64_success')?>
- =getPhrase('php_x64_failure')?>
- =getPhrase('php_extension_success', [$extension])?>
- =getPhrase('php_extension_failure', [$extension])?>
- =getPhrase('php_extension_success', ['Imagick'])?>
- =getPhrase('php_extension_success', ['GD'])?>
- =getPhrase('php_extension_gd_or_imagick_webp_failure', ['GD'])?>
- =getPhrase('php_extension_gd_or_imagick_failure')?>
- =getPhrase('php_memory_limit_success', [formatFilesizeBinary(getMemoryLimit())])?>
- =getPhrase('php_memory_limit_failure', [formatFilesizeBinary(getMemoryLimit())])?>
- =getPhrase('php_opcache_failure')?>
- =getPhrase('php_version_failure', [\PHP_VERSION, $phpVersionLowerBound, $phpVersionUpperBound])?>
=getPhrase('mysql_requirements')?>
- =getPhrase('mysql_version')?>
=getPhrase('result')?>
=getPhrase('result_success')?>
=getPhrase('result_failure')?>
=getPhrase('button_start_installation')?>