3v4l.org

run code in 300+ PHP versions simultaneously
<?php // Challenge: make this terrible code safe echo "<!doctype html>\n"; /* ALWAYS make sure to use PHP 5.5.0+ */ if (version_compare(PHP_VERSION, '5.5.0', '<')) { echo "You are using PHP " . PHP_VERSION . ". Please update to PHP 5.5.0 or higher."; exit; } $username = (!empty($_GET['username'])) ? : ((!empty($argv[1])) ? : null); $password = (!empty($_GET['password'])) ? : ((!empty($argv[2])) ? : null); if (empty($username) || empty($password)) { echo "No Username/Password Found!"; exit; } /** * While creating a new User we use password_hash() method to * generate a SALT+HASH string and store it * e.g. * $password = password_hash($password, PASSWORD_DEFAULT); */ try { $pdo = new PDO('sqlite::memory:'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("DROP TABLE IF EXISTS users"); $pdo->exec("CREATE TABLE users (username VARCHAR(255), password VARCHAR(255))"); /* Set ROOT password (SALT+HASH) */ $rootPassword = password_hash("secret", PASSWORD_DEFAULT); $data = ['username' => 'root', 'password' => $rootPassword]; $query = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)"); $query->bindValue(':username', $data['username'], PDO::PARAM_STR); $query->bindValue(':password', $data['password'], PDO::PARAM_STR); $query->execute(); /* Select Data */ $statement = $pdo->prepare("SELECT * FROM users WHERE username = :username LIMIT 1"); $statement->bindValue(':username', $username, PDO::PARAM_STR); $statement->execute(); $user = $statement->fetch(PDO::FETCH_ASSOC); // Get the single ROW /** * Verify the password using supplied string & stored SALT+HASH * password_verify(supplied, stored) */ if (!empty($user) && password_verify($password, $user['password'])) { echo "Access granted to $username!<br>\n"; } else { echo "Access denied for $username!<br>\n"; } } catch (PDOException $e) { // Print PDOException message echo $e->getMessage(); }

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)
7.4.00.0100.00615.21
7.3.120.0080.00614.94
7.3.110.0060.00614.50
7.3.100.0000.01414.94
7.3.90.0040.01214.95
7.3.80.0090.00614.51
7.3.70.0070.00714.75
7.3.60.0040.01214.86
7.3.50.0070.01114.64
7.3.40.0070.01014.83
7.3.30.0060.00914.70
7.3.20.0070.00316.41
7.3.10.0120.00416.61
7.3.00.0030.01016.33
7.2.250.0040.01414.93
7.2.240.0100.00914.84
7.2.230.0120.00614.91
7.2.220.0050.00515.13
7.2.210.0060.01314.88
7.2.200.0040.00715.07
7.2.190.0060.01014.72
7.2.180.0060.00914.95
7.2.170.0040.01115.05
7.2.60.0110.00017.04
7.2.00.0100.00318.93
7.1.330.0040.01215.49
7.1.320.0040.01115.68
7.1.310.0090.00615.66
7.1.300.0070.00715.67
7.1.290.0060.01215.88
7.1.280.0110.00415.55
7.1.270.0000.01215.64
7.1.260.0040.01115.59
7.1.200.0000.00815.86
7.1.100.0070.00317.81
7.1.70.0000.00916.99
7.1.60.0150.00919.24
7.1.50.0190.00616.76
7.1.00.0070.05322.50
7.0.200.0050.00316.71
7.0.140.0000.07322.09
7.0.100.0270.07720.05
7.0.90.0100.07719.95
7.0.80.0270.04019.96
7.0.70.0130.07719.98
7.0.60.0100.07320.00
7.0.50.0100.06720.39
7.0.40.0130.07720.16
7.0.30.0130.03720.05
7.0.20.0000.08720.04
7.0.10.0200.07020.10
7.0.00.0030.09020.05
5.6.280.0070.06720.93
5.6.250.0100.04720.65
5.6.240.0100.07320.62
5.6.230.0100.05320.77
5.6.220.0070.07020.68
5.6.210.0100.06020.64
5.6.200.0130.07320.98
5.6.190.0170.07721.06
5.6.180.0130.07721.08
5.6.170.0170.04021.04
5.6.160.0170.07321.06
5.6.150.0030.08321.06
5.6.140.0070.07321.05
5.6.130.0030.08321.18
5.6.120.0000.09721.15
5.6.110.0130.07721.18
5.6.100.0170.07321.03
5.6.90.0200.07721.03
5.6.80.0100.07020.43
5.6.70.0100.07720.48
5.6.60.0070.08020.56
5.6.50.0000.08720.50
5.6.40.0100.07020.35
5.6.30.0170.06320.41
5.6.20.0070.08020.48
5.6.10.0130.07720.50
5.6.00.0130.07320.31
5.5.380.0030.07720.38
5.5.370.0100.08320.48
5.5.360.0100.07020.36
5.5.350.0130.07320.47
5.5.340.0030.08320.94
5.5.330.0000.08320.94
5.5.320.0000.04720.95
5.5.310.0130.07720.86
5.5.300.0070.08720.85
5.5.290.0070.08020.82
5.5.280.0030.08720.91
5.5.270.0130.07720.82
5.5.260.0100.06320.90
5.5.250.0100.08020.67
5.5.240.0000.08020.18
5.5.230.0130.07020.25
5.5.220.0000.05320.30
5.5.210.0130.07020.26
5.5.200.0000.08320.27
5.5.190.0100.07320.17
5.5.180.0100.08020.20
5.5.160.0070.07020.24
5.5.150.0070.05020.27
5.5.140.0100.08020.29
5.5.130.0070.07720.25
5.5.120.0070.07020.17
5.5.110.0100.08020.15
5.5.100.0070.07320.11
5.5.90.0170.03720.06
5.5.80.0100.08020.20
5.5.70.0100.06720.18
5.5.60.0100.07020.18
5.5.50.0030.04720.07
5.5.40.0130.07020.11
5.5.30.0070.08020.15
5.5.20.0230.06319.98
5.5.10.0100.04320.07
5.5.00.0130.07720.05
5.4.450.0130.07319.28
5.4.440.0030.07719.11
5.4.430.0070.07719.38
5.4.420.0030.04719.36
5.4.410.0230.06719.33
5.4.400.0100.05718.98
5.4.390.0030.05319.05
5.4.380.0130.07318.95
5.4.370.0130.07019.03
5.4.360.0100.07018.96
5.4.350.0100.07019.10
5.4.340.0030.07719.23
5.4.320.0130.07018.96
5.4.310.0130.06719.04
5.4.300.0070.07719.07
5.4.290.0070.05018.98
5.4.280.0030.08019.07
5.4.270.0070.08018.81
5.4.260.0070.05318.81
5.4.250.0070.07318.96
5.4.240.0170.06319.14
5.4.230.0100.06719.10
5.4.220.0030.08019.04
5.4.210.0030.07019.00
5.4.200.0070.05019.14
5.4.190.0100.07319.22
5.4.180.0130.07019.09
5.4.170.0070.05018.89
5.4.160.0070.08018.79
5.4.150.0030.08019.21
5.4.140.0100.07316.29
5.4.130.0070.06316.23
5.4.120.0000.04716.28
5.4.110.0000.06016.24
5.4.100.0030.03716.33
5.4.90.0070.03316.26
5.4.80.0100.02716.33
5.4.70.0070.03016.35
5.4.60.0070.03316.36
5.4.50.0070.05016.20
5.4.40.0030.03716.28
5.4.30.0070.03316.29
5.4.20.0000.04016.30
5.4.10.0070.05016.30
5.4.00.0100.03015.66
5.3.290.0070.08014.61
5.3.280.0070.04314.45
5.3.270.0100.07314.59
5.3.260.0000.06314.47
5.3.250.0070.06314.55
5.3.240.0070.07314.45
5.3.230.0030.06714.60
5.3.220.0070.04014.43
5.3.210.0000.05014.54
5.3.200.0070.03014.55
5.3.190.0000.04014.48
5.3.180.0030.04014.54
5.3.170.0170.02014.56
5.3.160.0070.03314.55
5.3.150.0000.04314.57
5.3.140.0000.04714.50
5.3.130.0100.03014.52
5.3.120.0100.04714.52
5.3.110.0000.04314.52
5.3.100.0030.05313.90
5.3.90.0030.03713.96
5.3.80.0070.03313.89
5.3.70.0100.05313.98
5.3.60.0100.06714.02
5.3.50.0000.04013.90
5.3.40.0000.03713.93
5.3.30.0030.04713.90
5.3.20.0030.03313.70
5.3.10.0000.05013.65
5.3.00.0030.03313.64
5.2.170.0030.04011.19
5.2.160.0000.05711.17
5.2.150.0000.05311.17
5.2.140.0000.05711.13
5.2.130.0070.04311.10
5.2.120.0000.03311.15
5.2.110.0030.03010.91
5.2.100.0030.03311.15
5.2.90.0000.03010.95
5.2.80.0030.02711.13
5.2.70.0070.02711.13
5.2.60.0100.02311.05
5.2.50.0000.03011.10
5.2.40.0000.03011.07
5.2.30.0000.03010.80
5.2.20.0000.03710.84
5.2.10.0000.03010.93
5.2.00.0030.02710.75
5.1.60.0030.02010.04
5.1.50.0030.02310.07
5.1.40.0000.04010.01
5.1.30.0000.02710.38
5.1.20.0070.02010.27
5.1.10.0030.02310.10
5.1.00.0030.04010.06
5.0.50.0000.0208.55
5.0.40.0000.0208.42
5.0.30.0070.0238.22
5.0.20.0030.0178.28
5.0.10.0000.0208.16
5.0.00.0030.0278.16
4.4.90.0000.0177.66
4.4.80.0000.0307.66
4.4.70.0000.0337.66
4.4.60.0000.0177.66
4.4.50.0000.0137.66
4.4.40.0070.0307.66
4.4.30.0030.0177.66
4.4.20.0000.0177.66
4.4.10.0030.0137.66
4.4.00.0030.0237.66
4.3.110.0030.0237.66
4.3.100.0000.0177.66
4.3.90.0070.0107.66
4.3.80.0000.0237.66
4.3.70.0000.0177.66
4.3.60.0000.0137.66
4.3.50.0000.0177.66
4.3.40.0000.0277.66
4.3.30.0030.0137.66
4.3.20.0030.0137.66
4.3.10.0000.0177.66
4.3.00.0000.0137.66

preferences:
52.04 ms | 401 KiB | 5 Q