3v4l.org

run code in 500+ PHP versions simultaneously
<?php $serverSeed = getenv('PF_SERVER_SEED') ?: '...'; // 32 hex $serverSalt = getenv('PF_SERVER_SALT') ?: '...'; // 16 hex $publicHash = getenv('PF_PUBLIC_HASH') ?: '...'; // 64 hex $clientSeed = getenv('PF_CLIENT_SEED') ?: '...'; $nonce = (int) (getenv('PF_NONCE') ?: 0); $maxRoll = (int) (getenv('PF_MAX_ROLL') ?: 100000); $expectedRoll = getenv('PF_EXPECTED_ROLL') !== false ? (int) getenv('PF_EXPECTED_ROLL') : null; // ─────────────────────────────────────────────────────────────────────────── $roll = (hexdec(substr(hash_hmac('sha512', $serverSeed, "$clientSeed-$nonce"), 0, 15)) % $maxRoll) + 1; $hashOk = hash_equals($publicHash, hash_hmac('sha256', $serverSeed, $serverSalt)); printf("public hash matches: %s\n", $hashOk ? 'YES' : 'NO'); printf("roll: %d (full 1..%d)\n", $roll, $maxRoll); if ($expectedRoll !== null) { printf("matches API roll (%d): %s\n", $expectedRoll, $roll === $expectedRoll ? 'YES' : 'NO'); }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.5.80.0200.00716.79
8.5.70.0230.00616.86
8.5.60.0270.00616.71
8.5.50.0250.00716.56
8.5.40.0250.00616.55
8.5.30.0240.00616.59
8.5.20.0250.00616.61
8.5.10.0250.00616.59
8.5.00.0100.00616.81
8.4.230.0180.00619.38
8.4.220.0230.00719.42
8.4.210.0240.00719.36
8.4.200.0240.00719.47
8.4.190.0230.00719.43
8.4.180.0230.00819.46
8.4.170.0230.00719.49
8.4.160.0240.00719.50
8.4.150.0240.00719.52
8.4.140.0230.00717.54
8.4.130.0240.00717.52
8.4.120.0270.00617.68
8.4.110.0250.00717.65
8.4.100.0260.00717.68
8.4.90.0260.00717.68
8.4.80.0260.00717.67
8.4.70.0270.00717.67
8.4.60.0270.00717.71
8.4.50.0250.00717.70
8.4.40.0270.00717.58
8.4.30.0240.00717.57
8.4.20.0240.00617.59
8.4.10.0230.00617.60
8.3.320.0150.00518.28
8.3.310.0230.00618.26
8.3.300.0210.00618.24
8.3.290.0220.00618.22
8.3.280.0220.00618.24
8.3.270.0240.00616.58
8.3.260.0230.00616.57
8.3.250.0240.00616.58
8.3.240.0240.00616.56
8.3.230.0240.00616.56
8.3.220.0240.00616.55
8.3.210.0240.00616.55
8.3.200.0230.00716.54
8.3.190.0240.00616.56
8.3.180.0230.00616.60
8.3.170.0240.00616.58
8.3.160.0230.00616.60
8.3.150.0230.00616.57
8.3.140.0230.00616.57
8.3.130.0200.00516.58
8.3.120.0190.00516.57
8.3.110.0190.00616.60
8.3.100.0220.00516.58
8.3.90.0220.00516.61
8.3.80.0220.00616.58
8.3.70.0240.00616.56
8.3.60.0230.00516.58
8.3.50.0220.00616.60
8.3.40.0230.00617.71
8.3.30.0190.00617.71
8.3.20.0200.00617.74
8.3.10.0190.00617.77
8.3.00.0200.00617.72
8.2.320.0130.00517.91
8.2.310.0270.00717.78

preferences:
48.46 ms | 766 KiB | 5 Q