#!/usr/bin/env php $num * 1024 * 1024 * 1024, 'm' => $num * 1024 * 1024, 'k' => $num * 1024, default => $num, }; } $req = require __DIR__ . '/../config/requirements.php'; $errors = []; $warnings = []; // PHP version $minPhp = $req['min_php_version']; if (version_compare(PHP_VERSION, $minPhp, '<')) { $errors[] = sprintf('PHP %s is below the required minimum %s', PHP_VERSION, $minPhp); } // Required extensions foreach ($req['required_extensions'] as $ext) { if (!extension_loaded($ext)) { $errors[] = sprintf('Missing required PHP extension: %s', $ext); } } // memory_limit / max_execution_time sanity checks (warnings, not hard // failures — see config/requirements.php for why these matter). $memLimitIni = ini_get('memory_limit'); $memLimitBytes = parseIniBytes($memLimitIni); $minMemBytes = $req['min_memory_limit_mb'] * 1024 * 1024; if ($memLimitBytes !== -1 && $memLimitBytes < $minMemBytes) { $warnings[] = sprintf( 'memory_limit is %s, below the recommended minimum %dM', $memLimitIni, $req['min_memory_limit_mb'] ); } $maxExecTime = (int)ini_get('max_execution_time'); if ($maxExecTime !== 0 && $maxExecTime < $req['min_max_execution_time']) { $warnings[] = sprintf( 'max_execution_time is %ds, below the recommended minimum %ds', $maxExecTime, $req['min_max_execution_time'] ); } if (!empty($errors)) { fwrite(STDERR, "Requirement check FAILED:\n"); foreach ($errors as $err) { fwrite(STDERR, ' - ' . $err . "\n"); } exit(1); } foreach ($warnings as $warn) { fwrite(STDERR, "Requirement check WARNING: " . $warn . "\n"); } printf( "Requirement check passed: PHP %s (>= %s); extensions: %s\n", PHP_VERSION, $minPhp, implode(', ', $req['required_extensions']) ); exit(0);