Commit | Line | Data |
---|---|---|
240e07b0 TD |
1 | <?php |
2 | ||
3 | // phpcs:disable PSR1.Files.SideEffects | |
4 | ||
07d70f75 | 5 | $language = 'en'; |
240e07b0 TD |
6 | if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && \preg_match('~^de-[A-Z]+,de~', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) { |
7 | $language = 'de'; | |
158bd3ca TD |
8 | } |
9 | ||
240e07b0 TD |
10 | if (isset($_GET['language']) && \in_array($_GET['language'], ['de', 'en'])) { |
11 | $language = $_GET['language']; | |
dcaa83fc MW |
12 | } |
13 | ||
ccc4105f TD |
14 | const WSC_SRT_VERSION = '6.0.0'; |
15 | $requiredExtensions = [ | |
240e07b0 TD |
16 | 'ctype', |
17 | 'dom', | |
18 | 'exif', | |
19 | 'intl', | |
20 | 'libxml', | |
21 | 'mbstring', | |
22 | 'pdo', | |
23 | 'pdo_mysql', | |
24 | 'zlib', | |
ccc4105f | 25 | ]; |
61bf5ee4 | 26 | $phpVersionLowerBound = '8.1.2'; |
3fd17ae6 | 27 | $phpVersionUpperBound = '8.3.x'; |
ccc4105f | 28 | $phrases = [ |
240e07b0 TD |
29 | 'php_requirements' => [ |
30 | 'de' => 'PHP', | |
31 | 'en' => 'PHP Requirements', | |
32 | ], | |
33 | 'php_version_success' => [ | |
34 | 'de' => 'PHP-Version %s', | |
35 | 'en' => 'PHP version %s', | |
36 | ], | |
37 | 'php_version_failure' => [ | |
61bf5ee4 TD |
38 | 'de' => 'Gefundene PHP-Version %s ist inkompatibel. PHP %s – %s wird benötigt.', |
39 | 'en' => 'PHP version %s is incompatible. PHP %s – %s is required.', | |
240e07b0 | 40 | ], |
0307e17d TD |
41 | 'php_x64_success' => [ |
42 | 'de' => '64-Bit-Unterstützung', | |
43 | 'en' => '64-bit Support', | |
44 | ], | |
45 | 'php_x64_failure' => [ | |
46 | 'de' => '64-Bit-Unterstützung fehlt', | |
47 | 'en' => '64-bit support missing', | |
48 | ], | |
240e07b0 TD |
49 | 'php_extension_success' => [ |
50 | 'de' => 'Erweiterung %s vorhanden', | |
51 | 'en' => '%s extension loaded', | |
52 | ], | |
53 | 'php_extension_failure' => [ | |
54 | 'de' => 'Erweiterung %s fehlt', | |
55 | 'en' => '%s extension missing', | |
56 | ], | |
57 | 'php_extension_gd_or_imagick_failure' => [ | |
58 | 'de' => 'Erweiterung für Bildverarbeitung (GD oder Imagick) fehlt', | |
59 | 'en' => 'Extension for image processing (GD or Imagick) missing', | |
60 | ], | |
61 | 'php_extension_gd_or_imagick_webp_failure' => [ | |
62 | 'de' => 'Unterstützung für WebP-Grafiken in %s fehlt', | |
63 | 'en' => 'Support for WebP images in %s missing', | |
64 | ], | |
65 | 'php_memory_limit_success' => [ | |
66 | 'de' => 'Arbeitsspeicher-Limit %s', | |
67 | 'en' => '%s memory limit', | |
68 | ], | |
69 | 'php_memory_limit_failure' => [ | |
17c7564d TD |
70 | 'de' => 'Arbeitsspeicher-Limit %s ist nicht ausreichend. 128 MiB oder mehr wird benötigt.', |
71 | 'en' => 'Memory limit %s is too low. It needs to be set to 128 MiB or more.', | |
240e07b0 TD |
72 | ], |
73 | 'php_opcache_failure' => [ | |
17c7564d | 74 | 'de' => 'OPcache ist aktiviert, aber die erforderlichen Verwaltungsfunktionen (opcache_reset, opcache_invalidate) sind deaktiviert.', |
240e07b0 TD |
75 | 'en' => 'OPcache is enabled but the required management functions (opcache_reset, opcache_invalidate) are disabled.', |
76 | ], | |
77 | 'mysql_requirements' => [ | |
78 | 'de' => 'MySQL', | |
79 | 'en' => 'MySQL Requirements', | |
80 | ], | |
81 | 'mysql_version' => [ | |
f2dae7c8 AE |
82 | 'de' => 'Bitte stellen Sie sicher, dass MySQL 8.0.30+ oder MariaDB 10.5.15+ mit InnoDB-Unterstützung vorhanden ist.', |
83 | 'en' => 'Please make sure that MySQL 8.0.30+ or MariaDB 10.5.15+, with InnoDB support is available.', | |
240e07b0 TD |
84 | ], |
85 | 'result' => [ | |
86 | 'de' => 'Ergebnis', | |
87 | 'en' => 'Summary', | |
88 | ], | |
89 | 'result_success' => [ | |
90 | 'de' => 'Alle Systemvoraussetzungen sind erfüllt. Sie können die Installation von WoltLab Suite beginnen.', | |
91 | 'en' => 'Your system fulfills all of WoltLab Suite\'s system requirements. You are ready to install WoltLab Suite!', | |
92 | ], | |
93 | 'result_failure' => [ | |
94 | 'de' => 'Die Systemvoraussetzungen sind nicht erfüllt. Bitte beachten Sie die oben genannten Informationen. Wenden Sie sich ggf. an Ihren Webhoster oder Ihren Serveradministrator.', | |
95 | 'en' => 'The system requirements are not met. Please note the above information and contact your web host or server administrator if necessary.', | |
96 | ], | |
97 | 'button_start_installation' => [ | |
98 | 'de' => 'Installation starten', | |
99 | 'en' => 'Start Installation', | |
100 | ], | |
ccc4105f | 101 | ]; |
240e07b0 TD |
102 | function getPhrase($phrase, array $values = []) |
103 | { | |
104 | global $language, $phrases; | |
105 | ||
106 | if (!isset($phrases[$phrase]) || !isset($phrases[$phrase][$language])) { | |
107 | return "[unknown:{$phrase}]"; | |
108 | } | |
109 | ||
110 | return \vsprintf($phrases[$phrase][$language], $values); | |
ccc4105f | 111 | } |
240e07b0 TD |
112 | function checkPHPVersion() |
113 | { | |
61bf5ee4 | 114 | global $phpVersionLowerBound, $phpVersionUpperBound; |
240e07b0 TD |
115 | |
116 | $comparePhpVersion = \preg_replace('/^(\d+\.\d+\.\d+).*$/', '\\1', \PHP_VERSION); | |
117 | ||
61bf5ee4 TD |
118 | return \version_compare($comparePhpVersion, $phpVersionLowerBound, '>=') |
119 | && \version_compare($comparePhpVersion, \str_replace('x', '999', $phpVersionUpperBound), '<='); | |
ccc4105f | 120 | } |
17c7564d | 121 | function getMemoryLimit() |
240e07b0 TD |
122 | { |
123 | $memoryLimit = \ini_get('memory_limit'); | |
124 | ||
125 | // no limit | |
17c7564d TD |
126 | if ($memoryLimit == "-1") { |
127 | return -1; | |
128 | } else if (\function_exists('ini_parse_quantity')) { | |
129 | return \ini_parse_quantity($memoryLimit); | |
130 | } else { | |
131 | // completely numeric, PHP assumes byte | |
132 | if (\is_numeric($memoryLimit)) { | |
133 | return $memoryLimit; | |
134 | } | |
240e07b0 | 135 | |
17c7564d TD |
136 | // PHP supports 'K', 'M' and 'G' shorthand notation |
137 | if (\preg_match('~^(\d+)\s*([KMG])$~i', $memoryLimit, $matches)) { | |
138 | switch (\strtoupper($matches[2])) { | |
139 | case 'K': | |
140 | return $matches[1] * 1024; | |
240e07b0 | 141 | |
17c7564d TD |
142 | case 'M': |
143 | return $matches[1] * 1024 * 1024; | |
240e07b0 | 144 | |
17c7564d TD |
145 | case 'G': |
146 | return $matches[1] * 1024 * 1024 * 1024; | |
147 | } | |
240e07b0 TD |
148 | } |
149 | } | |
150 | ||
17c7564d TD |
151 | return 0; |
152 | } | |
153 | function checkMemoryLimit() | |
154 | { | |
680fbad7 TD |
155 | $memoryLimit = getMemoryLimit(); |
156 | return $memoryLimit == -1 || $memoryLimit >= 128 * 1024 * 1024; | |
17c7564d | 157 | } |
0307e17d TD |
158 | function checkX64() |
159 | { | |
160 | return \PHP_INT_SIZE == 8; | |
161 | } | |
17c7564d TD |
162 | function formatFilesizeBinary($byte): string |
163 | { | |
164 | $symbol = 'Byte'; | |
165 | if ($byte >= 1024) { | |
166 | $byte /= 1024; | |
167 | $symbol = 'KiB'; | |
168 | } | |
169 | if ($byte >= 1024) { | |
170 | $byte /= 1024; | |
171 | $symbol = 'MiB'; | |
172 | } | |
173 | if ($byte >= 1024) { | |
174 | $byte /= 1024; | |
175 | $symbol = 'GiB'; | |
176 | } | |
177 | if ($byte >= 1024) { | |
178 | $byte /= 1024; | |
179 | $symbol = 'TiB'; | |
180 | } | |
181 | ||
182 | return \floor($byte) . ' ' . $symbol; | |
ccc4105f | 183 | } |
240e07b0 TD |
184 | function checkResult() |
185 | { | |
186 | global $requiredExtensions; | |
187 | ||
0307e17d | 188 | if (!checkPHPVersion() || !checkX64() || !checkMemoryLimit() || !checkOpcache()) { |
240e07b0 TD |
189 | return false; |
190 | } | |
191 | ||
192 | foreach ($requiredExtensions as $extension) { | |
193 | if (!\extension_loaded($extension)) { | |
194 | return false; | |
195 | } | |
196 | } | |
197 | ||
198 | $hasSufficientImageLibrary = false; | |
199 | if (\extension_loaded('imagick') && \in_array('WEBP', \Imagick::queryFormats())) { | |
200 | $hasSufficientImageLibrary = true; | |
201 | } | |
202 | ||
203 | if (\extension_loaded('gd') && !empty(\gd_info()['WebP Support'])) { | |
204 | $hasSufficientImageLibrary = true; | |
205 | } | |
206 | ||
207 | if (!$hasSufficientImageLibrary) { | |
208 | return false; | |
209 | } | |
210 | ||
211 | return true; | |
ccc4105f | 212 | } |
240e07b0 TD |
213 | function checkInstallFile() |
214 | { | |
215 | return @\file_exists('install.php'); | |
ccc4105f | 216 | } |
240e07b0 TD |
217 | function checkOpcache() |
218 | { | |
219 | if (\extension_loaded('Zend Opcache') && \ini_get('opcache.enable')) { | |
220 | if (!\function_exists('\opcache_reset') || !\function_exists('\opcache_invalidate')) { | |
221 | return false; | |
222 | } | |
223 | } | |
224 | ||
225 | return true; | |
ccc4105f TD |
226 | } |
227 | ||
07d70f75 MW |
228 | ?><!doctype html> |
229 | <html lang="en"> | |
230 | <head> | |
240e07b0 TD |
231 | <meta charset="utf-8"> |
232 | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |
233 | ||
234 | <title>WoltLab Suite System Requirements Test</title> | |
235 | ||
236 | <style> | |
237 | html { | |
238 | background-color: #2D2D2D; | |
239 | box-sizing: border-box; | |
240 | color: #c0c0c0; | |
241 | font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; | |
242 | font-size: 14px; | |
243 | line-height: 1.5; | |
244 | } | |
245 | ||
246 | *, | |
247 | *::before, | |
248 | *::after { | |
249 | box-sizing: inherit; | |
250 | min-width: 0; | |
251 | } | |
252 | ||
253 | a { | |
254 | color: inherit; | |
255 | } | |
256 | ||
257 | .layout-boundary { | |
258 | margin: 50px auto; | |
259 | max-width: 980px; | |
260 | } | |
261 | ||
262 | main { | |
263 | background-color: #3D3D3D; | |
264 | border-radius: 3px; | |
265 | padding: 40px 20px; | |
266 | } | |
267 | ||
268 | header { | |
269 | align-items: flex-end; | |
270 | display: flex; | |
271 | justify-content: space-between; | |
272 | margin-bottom: 15px; | |
273 | } | |
274 | ||
275 | header > img { | |
276 | flex: 0 auto; | |
277 | } | |
278 | ||
279 | .language-switcher { | |
280 | flex: 0 auto; | |
281 | list-style-type: none; | |
282 | margin: 0; | |
283 | padding: 0; | |
284 | } | |
285 | ||
286 | .language-switcher > li { | |
287 | display: inline; | |
288 | } | |
289 | ||
290 | .language-switcher > li + li { | |
291 | border-left: 1px solid #444444; | |
292 | margin-left: 10px; | |
293 | padding-left: 10px; | |
294 | } | |
295 | ||
296 | .language { | |
297 | font-size: 18px; | |
298 | } | |
299 | ||
300 | .language.active { | |
301 | color: inherit; | |
302 | pointer-events: none; | |
303 | text-decoration: none; | |
304 | } | |
305 | ||
306 | .language:not(.active) { | |
307 | color: #fff; | |
308 | } | |
309 | ||
310 | footer { | |
311 | color: #9D9D9D; | |
312 | padding-top: 10px; | |
313 | text-align: right; | |
314 | } | |
315 | ||
316 | footer > a { | |
317 | color: inherit; | |
318 | text-decoration: none; | |
319 | } | |
320 | ||
321 | h2, h3 { | |
322 | margin: 0 0 10px 0; | |
323 | font-weight: 300; | |
324 | padding: 0; | |
325 | } | |
326 | ||
327 | h2:not(:first-child), | |
328 | h3:not(:first-child) { | |
329 | margin-top: 40px; | |
330 | } | |
331 | ||
332 | h2 { | |
333 | font-size: 32px; | |
334 | } | |
335 | ||
336 | h3 { | |
337 | font-size: 24px; | |
338 | } | |
339 | ||
340 | ul.system-requirements { | |
341 | padding: 0; | |
342 | } | |
343 | ||
344 | ul.system-requirements li { | |
345 | list-style: none; | |
346 | margin-bottom: 10px; | |
347 | padding: 0 20px; | |
348 | } | |
349 | ul.system-requirements li::before { | |
350 | font-family: Georgia, "Times New Roman", serif; | |
351 | margin-right: 10px; | |
352 | } | |
353 | ||
354 | li.success { | |
355 | color: #00c291; | |
356 | } | |
357 | li.success::before { | |
358 | content: '✔'; | |
359 | } | |
360 | li.failure { | |
361 | color: #f08f84; | |
362 | } | |
363 | li.failure::before { | |
364 | content: '✘'; | |
365 | } | |
366 | li.info { | |
367 | color: #63b0e3; | |
368 | } | |
369 | li.info::before { | |
370 | content: '✔'; | |
371 | } | |
372 | ||
373 | p.success, | |
374 | p.failure { | |
375 | border-radius: 3px; | |
376 | color: #fff; | |
377 | padding: 10px 20px; | |
378 | } | |
379 | p.success::before, | |
380 | p.failure::before { | |
381 | font-family: Georgia, "Times New Roman", serif; | |
382 | margin-right: 10px; | |
383 | } | |
384 | ||
385 | p.success { | |
386 | background-color: #008563; | |
387 | } | |
388 | p.success::before { | |
389 | content: '✔'; | |
390 | } | |
391 | ||
392 | p.failure { | |
393 | background-color: #de2f1b; | |
394 | } | |
395 | p.failure::before { | |
396 | content: '✘'; | |
397 | } | |
398 | ||
399 | .button { | |
400 | background-color: #375a7f; | |
401 | border-radius: 3px; | |
402 | border-width: 0; | |
403 | color: #fff; | |
404 | cursor: pointer; | |
405 | font-family: inherit; | |
406 | font-size: 1rem; | |
407 | padding: 15px 30px; | |
408 | text-decoration: none; | |
409 | vertical-align: middle; | |
410 | text-transform: uppercase; | |
411 | } | |
412 | ||
413 | .button:hover { | |
414 | background-color: #2b4764; | |
415 | } | |
416 | </style> | |
07d70f75 MW |
417 | </head> |
418 | <body> | |
419 | <div class="layout-boundary"> | |
240e07b0 TD |
420 | <header> |
421 | <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjIAAABQCAMAAAA0sW8TAAACxFBMVEUAAAD////////////////////////////////////////////////////////////a3ADk0RJzuQDp0hgAEiPj3wAwkHoAiL3YWQDVVQByuADaXABxuADWVwDa3AC2xwjs2xDUVADc3QD5ogPQ2AD3wBFzuQDZWgAEm8hwuAB4uQD65wAAg7nXVwAAcKhwuACAuCcJkr0LBADUVAAAir+4yQgwpqj4zFwAerEHChAAAAD/vCb/y1fj3wAAEB/5jACwwwX/uBwACRKBNgHDwhQAj8PueAD65wDiuxT+swcHiLP8qQPUVADfbQUAS4jL1wDe3QC/ygoASYKYxgAARIEAS4gAJ0395wBqKgAAAAD///9wuADUVAAAebDi3wDm4ADr4gDu4wAAfbQAdazg3gB8ugD35gDx4wChvgDK1gD05AClvwB1uQDc3QAAir7o4QDAwhPF1AHP2ADdYACVvQDgZQDjagDZWwDYxSXexinjxy7TxSLPxB7W2wAAhbsAWZQAgreJuwCpwAKavgAAYZvLxBvA0wORvADrdgABcKgAaqOEuwAAjsMAcqkAZ6AAXZiMvQDvewEAk8cAbaXpxzKBugD1hADmbgDXVwAAVY8ATInHwxiuwAX75wCdvwCxwQgAR4TEwxYAUY26wg7T2gD/nwAAZJ7wyDe3wQ3J0ge60ATpcQD/mQL7yUC0wQoBBAf/lAD5igEAQn/yfwC9whD/pQD9jwD/rQEAMF0AHDi1zQSvxwMAN2v/y1P/0WUAJksBP3abtwJ+oAD9uBeKqgH/2HmjyACTsQKWxQD/vzBDteYsk8URocR/vnxyscgeh7tYl7A+noePn3jGvFN3aU+nwknMxThKHgDM5NUVf7Glw6xRt5nm1pIpb5BSXlpfr1b6sVJyz/Hu4sna07LPx4AdXH6xrHaoczuqSQOD2vl3tlrilkluJ0CCAAAAWnRSTlMAv0CA7xBgIJ/fMM+PUHCv/hC8MP5AEC4Q6OcnfUiknIODdWVbIJlwXlgq7+uoXkD998/HnHj89sx2ENDPuqenYFAk+urKyr+6pICAYPfv39fPv7+QaN/fn1CakgmdAAAR5UlEQVR42uzYQQqDMBBG4TlCRdwWKbrKGVx7hO5iBFFw44m8a9UQomXUrsv7zvD4xygA8KfKbJEI8JP0aYZx7Pu+flEN7pVV2w7DuDUzzznR4EZqXbs145OZ36kAl8VMzu1nZjY0gwtJN/lkwszQDK49m2Zyh5lZmFIAXWKXZCYXv2Z8M7UAusI2cWZ2zbwEUOX2ODOhGcNTG+fJqM3kAmjybpuZcJpiM0YATdbZeJpCMyu+ZnDisc6M1kwlwNll8q+m2IyPRgBN8oin6dhMJoCm6L6aCdHwZsJVM01oJg4Nf4DxYc9eXqMG4jiAT2by2myysQqyi666Pk+LiFQPVbAgouhB8RYfB+vBi+IDX/WJ6EFFTz34AlddrAjrYRE8aEulKFbB50VBD6II/hfO5LdpstlJJoGy2rVfvNhJ85j55DczTVTm+GaChWZqmz2VGDM7g2YYGhY0lf8sXb0b169fP2/BjDRmYHICNFPr3/8rvRtGjx87ceLkyQs313Z3iXRtBjNQaDw0S5EwGGOD36LFtWAFJYpCD41rN+AigqS8SvoYKtElSdKJqqFJm96e0f7jx481zNxZ243is4httaHQ+GhmI2Ekx5H5LVnHcfgwbNqCkgXTQwWXl5Ag6a6SPpopO34yREGTMYt6xgb7+4Nm9m8RTE/zd+8OFhpXTTcSJkd7CXPfXIfGQrzQBrtjyCi6E4o8GdH01mqDAwMD42YuMDNr16DYrA6aATUJyGi0j0xeg+rQ6LwWizaonUIGy64Sm1gYY5VIDks25WRpyrKJ/mrmDdUGB5vMMDL7H8+N/z65F8wE0MxF4mRoDyFOdLdKczuINmgdQsZyn1JV/KKTkxkhI/VJLPT30rVqmJEJmjkJZu7FE1hNzXhoQM1WFBUxANpz9J8hQJZyMDEh5F8iYzAfJDRT2azOpJmbiNN0Fo0QoqH2BcTQBMx4U9PjeDML94IZQMOyNeErkuN0Jn357KgWx0w9mH7n/ktkJO4cqwuekNcjjtF0Nxi1LzNWDQMZMBMqMw9izWzeG0IzHYkC5cTmFh9T5ZaTHOufziCDwQZXkpbmPLaN0cSQKZZKpeKsVGJWUjFDrWa8MvMozswcSsZDw5KMDKvD3C22pdAWhb8t7wwyOn0URbAnSJqJIJMvF7a7Wb4kn0LMC2rm58ePHz+BGX9qgjITZ2bhtHEzoCYRGZW3dtOYC+ZG5W2+9Q4hI8OjcF+jTPvJFF0wkEIpGZpFVMyL4a/vz1RGnlW+/QqVGSBzuzt6zzQNzHhqDixG4sArxXFkuyOsc7fYnUGG6VcjXyOj3WSWbG9KoZho5TtEyXx+d6Wvb8fFkWc3Pgx4ZthqBmamB7dvr4kkc+pUE5oDs1GSZDmvlO12psGZg3Q2W3UGmeixNaDyto0MiAnlWjkvFNNTG6Ji3jAxO3b1jYzU+z5xZiYwwyfDzDA0oOZlMjKEs9iT4UecbXaGDXKnk0G0hbSXzKbtLWSOFkTr4J4xSubz24tXmJhdZ+/W6/UvYMZbAAOZW8/XRJMJonk1O/EeMdfy1NlGSSHCgy1Too6cjGRa0YOpERaJDQVES0NGUXXJoZF0VfH/xKPyyBikcTfEEI5tolqiEsIDgAkhLYcQFlaHdUIT+kUtp0syuzOd8/FzVoFD5tChJSguG0bHasM/vntiTp+v1OuVZZ/CMxMlc+75Qv5npuopQNNQc3kpgqTeZpsNKhbQCW2xtchverKpRZDBTig4ORlsO4HohlewpFYyaibNF0bxxghukUTU5pZDnFBIQF422CCFqS4vlIrFYjlM5nA5HyeGkvn6+50n5vTVCs31Zf2BmQkWM7du7TnHNTOnWgU0oKa6LSEZvaWuZxsTEmyzYxY+xAmHTDQZxXZCMZUIMhjABNBYolWcrLSBjH9nWUnKNNAYTQuZ5bOg2JSDZI4eOnxkXeTktPHJk9Gxld9fj4vZd+nGDWrm/gp/ZoLFjFtmnnLMdB08WAU0oObhtpnJv5FYLVtsrzPU8CbD9I/LuuNiYoU1YTPj9orCI6NgFoYTQ5SEZAwZrmFp7llIlv3P4JIxWZ3TVcP9UU4CXqLP+PpEksEs7Kw57EZDENN9hlxDCXRUsGPzf9o5r98ZoiiOzzCzO7M1eieIGkRvDySEB4JEEAwvREKIhCiJiB519boiiIToNTrRexcluujhn3Dvnp09M7e4xiwS9vvkZ8udO/cz33POLdumagEeBpkpfSSVU/3jBJl9z28Oz6W+s2bNGD9+2cacZt0BZGhkKiAz9pqAmXoTKTMIzVUnQLFpMbfSKvwrLZrEwdG0oeeeuGDEwqW/PDFGxEthnDYhQMZi9i1E00MVSJgGviE8MvL012L7oEX8LTeqKsqDAZn1exqJiaHIdLh5C0yGEpOZt41o48Ztt5/4khlAZvTF0+3YacCJuyYCNHlqlpQPsNRisyU2+g07X+q/4Sa/+8QwwyDDE5M2udEyYhwyCX7TQlKBBITLePI3I2MJ+mDq3rhVVVg7bSDITCbILOxalSfmKEXmxt2bi5CYzMxsNkupWfxijZvMIDJjL1w8XaecLyz1G0ORQWrGOJKZPPWykSeDsbH7bKas43gw90cvFjJmXNgGXfxikaFFnikkLqmY+oaQ8fuQKSvm1pLW4nVZZBb2rMERQ5G59OFmLvclxAAyRFmKzarHvvwXkBl97eJY70a9CoSYMWMAGaDmquOpsdUTwClfbqN7lyf9JXZEkQhY+GVhkcG7zY+0wSBjAzEcM4oMN6bnE2UrFSs2MnhzddkUqvjSmmPJRJBZv3DhypX1WWIoM2fv31o0cqRrMqtmLV8+E6iZ1x7WDLBkosiMvnzx2m7XaMrVGzNhF0EGoAGNUhRM8vm5BI45ltnsrJ9pSHps2jBKoZCRtoGhk0FGMsOfUk7KJbH61SHJLi4yugzaqCG7tKrVEBmazBBkjvRs4CFm+1GqS89vDS+YTCazavi85VSUmll3pgmQ2Xz54sXRu2vXq1SpXu0JE+YDMgjNbkddMCEkvmLa9t5+gAQfjLhnLJKKHThhkSkrXQSK8shY0qfBUJksVFegeCJWVGSicmbLSi+thlsyITLr1nXNQ1Ou6/btOWau3Lq3aCmazKqlO+YR5aiZd5tFZg5FZvPFixcvXzh9ajdVHhmkZoVTPdgcd9LTSZtNhbG0KuuxVcXe0NDI2PI2LA6ZqGKhXi6o3nWjQE2kiMgk5JHRNKSXVpdJZigyhw51JUfaGvTeux2QufH82aJC8pshyCxbtmzHjjw2I+6IkJk7miBz+dqF0XMINoAMar7jNAy4DYAtsXFNm13g5dMffoY4FDLqNmIsMmlV19SKRix3xi1WNGTsHzRvyV9r40HGtZlDx44dPLh3L0WGMvPy2cjVEJfAZMYvXrx4WQGb208EgWkuYcaHzIQJYya4yKxwnCaaUMoNImlkH8tsLLGV2wMgSQ6FjLoNjU1/U8qugZRBCqiJFAmZ6I9MLim/tBpcMgPIIDNn7y5a7YtLs1YTEWyAmuF3RMhM2jyaQYYIoDnlOE5TTST16DDDGscbgA8s3jHZOnA4ZNRt6GyRHeBb5MLJ/TJhkcE/onIblV9aXUhmMDIdWXfIZzPvFi2myGBcGr506aJFlBrA5vYTLLIRmUlXL3DIgNWsdYKkMpilAPppdhcwn/GkIV+RDmc6HDLqNhIMMqaUAJFXqRfdbDMsMlixSQWXJqmaxJEJmKEms2zxaiixSb1EiFk1kohQ42Iz8g4zlQfILLg6x4vM/Al5XXcCpTJYC8H9SjG33GbqKvlY44shkVFbEINMyO0rPDORUMjg2xSSXlqtQmTCBBhshoiaDEXGm8oMJ/Jic/vJdD8ym3PILNh82osMESXmquMES2Wga6abr0UF260AK137L5ChtUz8LyOjNafIMDZzKGczRG/vL2OQmTFixPAcNR17tV1KsRn5giIDy5KAzNwcMis2nxrrIjM/L5LIyOOSKmWN+aMB2g4UMP8HMjmbKVpg0oIJd10xNuMJTdvf79hBkPEWTLNG5NS2ikbUi5rNqsfEZDhkVqyYPenUaT8yV8c5weISFoPQx4Ro6zikyFHFNBTIKFr6a6h4UqcrOGj8druIohwIjwymWcFVV2AzwAwxGQ6ZGbOImrXQQFU6khD1Il8w7d9EV7IRmSWzr+4GZHZTYHaTPCZ4XMICWof+MqkxVqvM3It0PiUUMuo2NJtBJqLomBQ6uTUVt8gOrqqszWA682nePAaZzPgZM2Y0q6K5qtxx+PDMY6Zgmkvj0uzZS5asXXF1924CC9Gp68RiAsYlnOaP5fgwRMfgwDsSbCCTP6KhkFG3EWWn8qwfsJWWV99qZNJSZOyfnMpLSGsOuDSpavltBpl5+wqQWeRFZvx4IMbDTHtIZbBgKiAzatSoFdeJVoxyXMEqdtAymy+xMVZhiY1PuWL7TdgFA0P+alkWGcOUD35KQbb4tSgmTVKPUiODJsdjrzwS1sZrMxCaKDN7Hy5fPm8eg0wm0wqIQWZGzHjsTWUQmbUEmXHjxjko5TyefBbEgl5wR/phsUT1ixF4lq4oyFjSQTVtbo0pIj8/bMofEnU0SwrGHD1Xjow6aFrKrcc18jbDMPPtFVl6RGTy8zIuMchMsxHt3VQGs19ExkEFT34xc7BFN9jOv5LmI4PsEHwoZNRtlGVWsgU2o45ZaemQmbCVTJ6NoOeqNz+wGzjUa9yowTmbgdCEzDwi2xuWz9vBzP421lhVaTbrK8YlzH5FyCi2yshtEktstszmXDQhcfwUmkxIZHC7Fu97PDIINOtGUdUPP/BEMkDokh8zkCOjhtb8mfMNnbsP2wChycPM52yWIEOTGQ8yQAzLzPhW+8WpDIeMYtevPE8sy4CP2/S48sUUb5JM4gMfHpmoAaDye+0MdsEAz4+zG0ETAX5eBjOZuOQABv5fWSUy/FQy89/qWqrTF09oAmZWfgRk/CVTW02kxuMf7NyCcYlJZUKaDCQrcIBJFPV1xn8kGUQEZjTDIYNKQhv87swkN5UX55iBQzNxBZEp8YbgmN9RYrL9oWpkzLggApk6wKxUawhNyMzC19lt2Swgg8kMEMOrbaYlE5cQmXAmg/ZuSKI+dJu/tWnf2ck0DHEIZJRtmLBXj0OGjky8jC9EGpQYU9VlHb+d7QOSZZTxfswAKhTIIDNcK2VsCFdqdXuaC03IzKPsxm3bCDIk/8Vkpod0B2aPB2y9BHEpnMlgESDrR0q8uTYCn0i6lmDlmEtqgZCxy0qEzNA2TPfYGMQqDhl3ZNzzzjHY+CInBgcfP6RFI/B0RPiDClbM/cvCdyiRQWbwC7Skjk+gUp0IM1MLzKwnxJCTSpjM5GymGRLDqnKPN2gyDDKhyiX0kqTQwSX+E9UL50Z1elvgaQqEjFzM2VS70IZdRrzGZCbAJ3UiPIsrEfYApFMZ/KY8oMSGKyAg6zbzXCiRwdVJg35BQsdO/JRae5jp83rb1q2AjCcywRSeRFVatVTGpeqIHCd1EBDfY5GP8ufm4exksZDBSGRwv+TMIwP/8H+frh4WOH0p7YPkGixTC4aMFiXW9Iu/Yd7twIHuwMyUzx8Pnz9MmIFkphCZgBgpM+3njlWYTBPtF2Xqui7JyFK6Lrv/sUQcN+dzL5LPeQGDP1EJXSLmc5ZrNVYSvyohaAVPC+ipqKYQfsZweZT+xogZSRv5t6TIcLO9iPj7HBN/AXYiiIYcOHDgafcvj16fP3PiDCCzzVsztVB8vvEDX1xayyFTXvvzisKR9d+qMkS/8WrKUP3Em8ywnYhpgdXpAFXFkyfPnThx5vBhf2RaisRImXnjJr84jzfOF5ZK+tfUJYdMxZPnznlsZjkwA8SomOHjEhLTVCvpn1Pn1oDMSRcZtBkgRqW2LQkxkuS3iVbSPyjCDBuZwGaAGLV6tfSbzLgSMf+6CDMYmdBmkBiVGrdEkxlVIuZ/EGGmosdmIJthqmsFMwKTqV4i5l9WF9Zm+gerdJpWJ8T4TaZ8KfP9t9UpnwATmyHM9B2oBVS5hn6TqV5TK+kfV7cuJ12b6TugshZcTcsDMgBMaTrmf1C3Tl0GnTjRfwA6TFBoapbPqWYpJJVU0v+j7+/0fRp9XeOgAAAAAElFTkSuQmCC" style="height: 40px; width: 281px" alt="WoltLab Suite"> | |
422 | <ul class="language-switcher"> | |
423 | <li><a href="./test.php?language=de" class="language<?=($language === 'de' ? ' active' : '')?>">Deutsch</a></li> | |
424 | <li><a href="./test.php?language=en" class="language<?=($language === 'en' ? ' active' : '')?>">English</a></li> | |
425 | </ul> | |
426 | </header> | |
427 | ||
428 | <main> | |
429 | <h2>WoltLab Suite System Requirements Test</h2> | |
430 | ||
431 | <h3><?=getPhrase('php_requirements')?></h3> | |
432 | ||
433 | <ul class="system-requirements"> | |
434 | <?php if (checkPHPVersion()) { ?> | |
435 | <li class="success"><?=getPhrase('php_version_success', [\PHP_VERSION])?></li> | |
240e07b0 | 436 | |
0307e17d TD |
437 | <?php if (checkX64()) { ?> |
438 | <li class="success"><?=getPhrase('php_x64_success')?></li> | |
439 | <?php } else { ?> | |
440 | <li class="success"><?=getPhrase('php_x64_failure')?></li> | |
441 | <?php } ?> | |
442 | ||
74911405 TD |
443 | <?php foreach ($requiredExtensions as $extension) { ?> |
444 | <?php if (\extension_loaded($extension)) { ?> | |
445 | <li class="success"><?=getPhrase('php_extension_success', [$extension])?></li> | |
446 | <?php } else { ?> | |
447 | <li class="failure"><?=getPhrase('php_extension_failure', [$extension])?></li> | |
448 | <?php } ?> | |
449 | <?php } ?> | |
450 | ||
451 | <?php if (\extension_loaded('imagick') && \in_array('WEBP', \Imagick::queryFormats())) { ?> | |
452 | <li class="success"><?=getPhrase('php_extension_success', ['Imagick'])?></li> | |
453 | <?php } elseif (\extension_loaded('gd')) { ?> | |
454 | <?php if (!empty(\gd_info()['WebP Support'])) { ?> | |
455 | <li class="success"><?=getPhrase('php_extension_success', ['GD'])?></li> | |
456 | <?php } else { ?> | |
457 | <li class="failure"><?=getPhrase('php_extension_gd_or_imagick_webp_failure', ['GD'])?></li> | |
458 | <?php } ?> | |
240e07b0 | 459 | <?php } else { ?> |
74911405 | 460 | <li class="failure"><?=getPhrase('php_extension_gd_or_imagick_failure')?></li> |
240e07b0 | 461 | <?php } ?> |
240e07b0 | 462 | |
74911405 TD |
463 | <?php if (checkMemoryLimit()) { ?> |
464 | <li class="success"><?=getPhrase('php_memory_limit_success', [formatFilesizeBinary(getMemoryLimit())])?></li> | |
240e07b0 | 465 | <?php } else { ?> |
74911405 | 466 | <li class="failure"><?=getPhrase('php_memory_limit_failure', [formatFilesizeBinary(getMemoryLimit())])?></li> |
240e07b0 | 467 | <?php } ?> |
240e07b0 | 468 | |
74911405 TD |
469 | <?php if (!checkOpcache()) { ?> |
470 | <li class="failure"><?=getPhrase('php_opcache_failure')?></li> | |
471 | <?php } ?> | |
240e07b0 | 472 | <?php } else { ?> |
74911405 | 473 | <li class="failure"><?=getPhrase('php_version_failure', [\PHP_VERSION, $phpVersionLowerBound, $phpVersionUpperBound])?></li> |
240e07b0 TD |
474 | <?php } ?> |
475 | </ul> | |
476 | ||
477 | <h3><?=getPhrase('mysql_requirements')?></h3> | |
478 | ||
479 | <ul class="system-requirements"> | |
480 | <li class="info"><?=getPhrase('mysql_version')?></li> | |
481 | </ul> | |
482 | ||
483 | <h2><?=getPhrase('result')?></h2> | |
484 | ||
485 | <?php if (checkResult()) { ?> | |
486 | <p class="success"><?=getPhrase('result_success')?></p> | |
487 | <?php } else { ?> | |
488 | <p class="failure"><?=getPhrase('result_failure')?></p> | |
489 | <?php } ?> | |
490 | ||
491 | <?php if (checkInstallFile()) { ?> | |
492 | <p style="margin-top: 50px; text-align: center;"><a href="install.php" class="button"><?=getPhrase('button_start_installation')?></a></p> | |
493 | <?php } ?> | |
494 | </main> | |
495 | <footer> | |
496 | <a href="https://www.woltlab.com">WoltLab Suite System Requirements Test v<?=WSC_SRT_VERSION?></a> | |
497 | </footer> | |
07d70f75 | 498 | </div> |
158bd3ca | 499 | </body> |
d710286c | 500 | </html> |