Add support for image thumbnails
[GitHub/WoltLab/WCF.git] / wcfsetup / test.php
CommitLineData
240e07b0
TD
1<?php
2
3// phpcs:disable PSR1.Files.SideEffects
4
07d70f75 5$language = 'en';
240e07b0
TD
6if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && \preg_match('~^de-[A-Z]+,de~', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
7 $language = 'de';
158bd3ca
TD
8}
9
240e07b0
TD
10if (isset($_GET['language']) && \in_array($_GET['language'], ['de', 'en'])) {
11 $language = $_GET['language'];
dcaa83fc
MW
12}
13
ccc4105f
TD
14const 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
102function 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
112function 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 121function 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}
153function checkMemoryLimit()
154{
680fbad7
TD
155 $memoryLimit = getMemoryLimit();
156 return $memoryLimit == -1 || $memoryLimit >= 128 * 1024 * 1024;
17c7564d 157}
0307e17d
TD
158function checkX64()
159{
160 return \PHP_INT_SIZE == 8;
161}
17c7564d
TD
162function 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
184function 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
213function checkInstallFile()
214{
215 return @\file_exists('install.php');
ccc4105f 216}
240e07b0
TD
217function 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/fn1CakgmdAAAR5UlEQVR42uzYQQqDMBBG4TlCRdwWKbrKGVx7hO5iBFFw44m8a9UQomXU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" 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>