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; } $_GET['username'] = 'mayur'; $_GET['password'] = '12346'; $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.0070.07715.63
7.3.120.0100.06915.84
7.3.110.0100.07315.65
7.3.100.0030.07815.47
7.3.90.0070.07315.77
7.3.80.0030.07315.88
7.3.70.0030.07015.52
7.3.60.0070.07915.61
7.3.50.0030.07015.60
7.3.40.0000.07215.41
7.3.30.0030.07315.71
7.3.20.0030.07317.50
7.3.10.0100.06617.61
7.3.00.0000.08317.50
7.2.250.0100.07216.05
7.2.240.0000.08115.65
7.2.230.0030.07316.09
7.2.220.0000.07915.77
7.2.210.0070.06615.99
7.2.200.0070.06516.09
7.2.190.0070.07215.75
7.2.180.0100.06215.79
7.2.170.0070.07216.05
7.1.330.0030.07216.37
7.1.320.0070.06216.61
7.1.310.0060.07116.64
7.1.300.0100.07016.20
7.1.290.0070.06616.54
7.1.280.0070.06816.56
7.1.270.0030.07316.40
7.1.260.0100.06816.20
7.1.70.0000.07017.74
7.1.60.0130.11819.40
7.1.50.0100.11017.79
7.1.00.0030.08722.45
7.0.200.0000.06817.48
7.0.140.0000.15022.20
7.0.120.0030.08322.25
7.0.60.0100.16320.02
7.0.50.0000.10017.96
7.0.40.0030.16720.09
7.0.30.0330.13320.28
7.0.20.0230.11720.24
7.0.10.0030.11320.34
7.0.00.0000.10720.29
5.6.280.0070.16020.88
5.6.210.0130.15320.84
5.6.200.0070.16318.27
5.6.190.0000.17020.50
5.6.180.0470.14020.58
5.6.170.0200.10320.79
5.6.160.0230.14020.48
5.6.150.0170.13318.20
5.6.140.0170.15018.19
5.6.130.0100.15718.16
5.6.120.0100.14721.22
5.6.110.0030.12721.09
5.6.100.0100.15021.09
5.6.90.0130.15321.07
5.6.80.0170.10320.50
5.5.350.0700.12720.59
5.5.340.0100.13318.06
5.5.330.0100.16720.29
5.5.320.0000.10320.50
5.5.310.0470.14020.27
5.5.300.0130.16018.05
5.5.290.0070.16318.02
5.5.280.0030.10720.72
5.5.270.0070.13320.80
5.5.260.0030.14320.94
5.5.250.0070.09720.76
5.5.240.0230.17320.36
5.4.450.0400.04319.39
5.4.440.0470.03719.47
5.4.430.0500.03019.42
5.4.420.0400.07019.20
5.4.410.0500.05319.28
5.4.400.0470.05319.09
5.4.390.0430.03719.16
5.4.380.0500.07019.24
5.4.370.0530.03319.09
5.4.360.0570.06719.06
5.4.350.0470.04019.06
5.4.340.0470.03319.21
5.4.320.0500.06018.83
5.4.310.0470.05719.25
5.4.300.0400.04319.16
5.4.290.0430.03019.13
5.4.280.0330.04018.91
5.4.270.0570.05319.15
5.4.260.0370.03719.21
5.4.250.0430.03719.08
5.4.240.0470.05319.08
5.4.230.0370.05719.25
5.4.220.0230.06018.89
5.4.210.0400.03719.21
5.4.200.0570.03319.07
5.4.190.0530.05319.24
5.4.180.0430.04319.07
5.4.170.0470.05019.08
5.4.160.0530.05719.21
5.4.150.0370.04019.14
5.4.140.0400.04316.27
5.4.130.0330.04316.30
5.4.120.0430.06716.45
5.4.110.0570.06016.39
5.4.100.0430.04316.45
5.4.90.0430.03716.39
5.4.80.0570.05316.43
5.4.70.0600.06316.45
5.4.60.0500.03716.25
5.4.50.0470.03316.37
5.4.40.0570.03716.41
5.4.30.0530.04316.36
5.4.20.0500.05316.27
5.4.10.0530.04716.38
5.4.00.0470.03315.90
5.3.290.0400.07014.61
5.3.280.0470.06714.54
5.3.270.0430.06714.46
5.3.260.0630.05714.45
5.3.250.0330.05314.64
5.3.240.0430.03714.57
5.3.230.0430.06314.45
5.3.220.0430.04714.43
5.3.210.0600.06014.53
5.3.200.0500.05714.67
5.3.190.0530.07314.43
5.3.180.0600.05314.41
5.3.170.0430.04014.52
5.3.160.0530.05714.45
5.3.150.0600.06014.42
5.3.140.0530.06714.41
5.3.130.0470.05014.40
5.3.120.0570.05714.40
5.3.110.0530.04314.42
5.3.100.0430.03713.93
5.3.90.0500.03714.12
5.3.80.0530.03713.89
5.3.70.0500.04014.01
5.3.60.0470.04713.95
5.3.50.0430.03714.01
5.3.40.0470.04013.89
5.3.30.0500.03013.75
5.3.20.0570.03313.48
5.3.10.0530.06713.62
5.3.00.0470.06713.56
5.2.170.0370.03011.24
5.2.160.0470.04711.06
5.2.150.0430.03011.31
5.2.140.0400.03011.16
5.2.130.0500.04011.02
5.2.120.0500.03011.16
5.2.110.0470.04310.96
5.2.100.0400.03311.04
5.2.90.0370.03011.12
5.2.80.0400.03011.04
5.2.70.0470.03711.19
5.2.60.0400.04010.99
5.2.50.0530.05010.88
5.2.40.0430.05010.85
5.2.30.0400.05010.80
5.2.20.0430.05010.91
5.2.10.0470.04310.83
5.2.00.0370.05010.62
5.1.60.0330.02710.08
5.1.50.0370.0309.94
5.1.40.0330.0239.89
5.1.30.0370.03310.33
5.1.20.0330.03310.32
5.1.10.0500.05010.05
5.1.00.0470.03010.05
5.0.50.0130.0309.42
5.0.40.0270.0209.42
5.0.30.0200.0479.42
5.0.20.0170.0279.42
5.0.10.0230.0379.42
5.0.00.0200.0579.42
4.4.90.0200.0309.42
4.4.80.0130.0209.42
4.4.70.0270.0209.42
4.4.60.0200.0379.42
4.4.50.0200.0309.42
4.4.40.0130.0339.42
4.4.30.0200.0179.42
4.4.20.0130.0239.42
4.4.10.0200.0339.42
4.4.00.0170.0239.42
4.3.110.0170.0209.42
4.3.100.0170.0139.42
4.3.90.0170.0139.42
4.3.80.0100.0409.42
4.3.70.0200.0279.42
4.3.60.0130.0279.42
4.3.50.0230.0239.42
4.3.40.0170.0239.42
4.3.30.0130.0109.42
4.3.20.0070.0179.42
4.3.10.0070.0339.42
4.3.00.0170.0139.42

preferences:
34.96 ms | 400 KiB | 5 Q