3v4l.org

run code in 300+ PHP versions simultaneously
<?php class TokenGenerator { const ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; public function generateToken($length = 16) { $alphabetSize = strlen(self::ALPHABET); $token = ''; while (strlen($token) < $length) { $randomBytes = $this->generateRandomBytes(32); $offset = abs(hexdec(bin2hex(substr($randomBytes, 0, 4)))) % $alphabetSize; $token .= substr(self::ALPHABET, $offset, 1); } return $token; } private function generateRandomBytes($length) { $bytes = ''; // pre-fill with weak bytes while (strlen($bytes) < $length) { $bytes .= chr(mt_rand(0, 255)); } // merge with mcrypt iv if (function_exists('mcrypt_create_iv')) { $bytes = hash_hmac('sha256', $bytes, mcrypt_create_iv($length, MCRYPT_DEV_URANDOM), true); } // merge with openssl bytes if (function_exists('openssl_random_pseudo_bytes')) { $bytes = hash_hmac('sha256', $bytes, openssl_random_pseudo_bytes($length), true); } // merge with urandom if (file_exists('/dev/urandom') && is_readable('/dev/urandom')) { $bytes = hash_hmac('sha256', $bytes, file_get_contents('/dev/urandom', null, null, null, $length), true); } return substr($bytes, 0, $length); } } $gen = new TokenGenerator(); var_dump($gen->generateToken(10)); var_dump($gen->generateToken(10)); var_dump($gen->generateToken(10)); var_dump($gen->generateToken(20)); var_dump($gen->generateToken(20)); var_dump($gen->generateToken(20));

Abusive script

This script was stopped while abusing our resources

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.10.0120.01215.13
7.4.00.0070.01315.25
7.3.130.0100.01314.78
7.3.120.0090.01314.71
7.3.110.0100.01315.05
7.3.100.0070.01114.61
7.3.90.0110.00714.86
7.3.80.0110.00714.95
7.3.70.0060.01615.01
7.3.60.0040.01214.97
7.3.50.0090.00314.88
7.3.40.0030.01314.77
7.3.30.0030.01314.96
7.3.20.0080.00516.54
7.3.10.0070.01416.75
7.3.00.0100.00316.66
7.2.260.0130.01314.82
7.2.250.0100.01415.25
7.2.240.0040.01414.88
7.2.230.0100.01615.28
7.2.220.0100.01315.16
7.2.210.0110.00715.25
7.2.200.0130.00715.14
7.2.190.0100.00315.11
7.2.180.0100.00615.07
7.2.170.0060.00614.93
7.2.160.0150.00314.84
7.2.150.0070.01016.96
7.2.140.0030.01516.75
7.2.130.0040.01417.09
7.2.120.0140.00316.75
7.2.110.0000.01916.70
7.2.100.0120.00616.90
7.2.90.0120.00616.58
7.2.80.0040.01417.11
7.2.70.0030.01516.87
7.2.60.0080.01217.10
7.2.50.0100.00716.59
7.2.40.0040.01416.91
7.2.30.0140.00416.89
7.2.20.0110.00716.80
7.2.10.0090.00916.73
7.2.00.0070.01317.99
7.1.330.0100.01015.63
7.1.320.0070.01015.86
7.1.310.0100.01015.73
7.1.300.0030.01015.67
7.1.290.0070.01015.56
7.1.280.0130.01015.84
7.1.270.0030.01615.89
7.1.260.0100.01015.84
7.1.250.0030.01715.86
7.1.240.0070.01415.98
7.1.230.0060.01015.64
7.1.220.0070.01315.75
7.1.210.0040.01415.70
7.1.200.0060.01615.87
7.1.190.0070.00715.56
7.1.180.0050.00815.65
7.1.170.0130.00715.59
7.1.160.0040.01115.84
7.1.150.0060.01215.80
7.1.140.0070.01015.62
7.1.130.0040.01215.62
7.1.120.0060.00615.94
7.1.110.0030.02015.88
7.1.100.0030.01315.79
7.1.90.0070.01015.72
7.1.80.0070.01715.72
7.1.70.0070.01316.46
7.1.60.0140.01417.58
7.1.50.0200.01225.30
7.1.40.0070.00715.80
7.1.30.0130.00715.90
7.1.20.0110.00815.87
7.1.10.0030.01715.81
7.1.00.0050.02119.16
7.0.330.0030.01215.34
7.0.320.0000.02015.26
7.0.310.0100.01015.23
7.0.300.0030.01615.41
7.0.290.0070.01115.44
7.0.280.0060.01015.41
7.0.270.0160.00315.46
7.0.260.0030.02015.45
7.0.250.0030.01715.45
7.0.240.0030.01315.56
7.0.230.0060.01315.38
7.0.220.0090.00915.36
7.0.210.0120.00615.41
7.0.200.0090.01015.98
7.0.190.0070.01115.52
7.0.180.0000.01115.50
7.0.170.0100.01015.58
7.0.160.0040.01415.55
7.0.150.0100.00715.53
7.0.140.0100.04318.70
7.0.130.0060.01015.43
7.0.120.0090.01015.61
7.0.110.0060.00615.52
7.0.100.0270.02617.78
7.0.90.0250.02517.73
7.0.80.0330.02217.68
7.0.70.0500.03517.75
7.0.60.0340.03817.74
7.0.50.0360.04117.93
7.0.40.0360.03816.82
7.0.30.0350.04516.75
7.0.20.0370.03816.86
7.0.10.0380.04316.77
7.0.00.0360.04616.83
5.6.400.0070.01114.67
5.6.390.0100.00714.20
5.6.380.0100.01014.40
5.6.370.0040.02114.39
5.6.360.0120.00914.63
5.6.350.0080.00814.55
5.6.340.0220.00014.68
5.6.330.0070.00714.53
5.6.320.0070.01314.60
5.6.310.0040.01814.78
5.6.300.0090.01214.75
5.6.290.0170.00314.35
5.6.280.0030.04617.79
5.6.270.0070.01114.42
5.6.260.0070.00714.11
5.6.250.0300.02417.65
5.6.240.0420.02017.35
5.6.230.0320.01817.57
5.6.220.0330.03217.47
5.6.210.0320.02217.60
5.6.200.0300.04617.79
5.6.190.0330.04017.91
5.6.180.0360.03717.69
5.6.170.0310.02917.74
5.6.160.0340.03117.85
5.6.150.0410.04517.73
5.6.140.0330.03817.77
5.6.130.0320.02817.80
5.6.120.0330.02517.83
5.6.110.0270.04217.59
5.6.100.0320.02517.67
5.6.90.0370.04217.80
5.6.80.0390.04017.25
5.6.70.0460.04817.37
5.6.60.0370.04317.34
5.6.50.0290.02617.48
5.6.40.0230.03517.23
5.6.30.0340.02217.63
5.6.20.0400.04117.25
5.6.10.0270.05417.31
5.6.00.0510.04817.38
5.5.380.0270.02417.47
5.5.370.0260.02317.35
5.5.360.0350.02417.24
5.5.350.0270.04417.38
5.5.340.0320.04617.45
5.5.330.0400.04217.72
5.5.320.0350.04317.65
5.5.310.0390.04017.61
5.5.300.0370.04717.62
5.5.290.0380.04517.54
5.5.280.0390.01717.77
5.5.270.0350.02817.63
5.5.260.0370.05417.46
5.5.250.0340.04317.45
5.5.240.0350.03517.34
5.5.230.0330.04917.39
5.5.220.0370.04217.34
5.5.210.0330.04517.34
5.5.200.0330.02317.30
5.5.190.0350.04617.29
5.5.180.0290.02717.27
5.5.170.0100.01314.37
5.5.160.0500.04017.16
5.5.150.0380.04017.36
5.5.140.0320.02917.11
5.5.130.0520.04417.30
5.5.120.0370.04517.18
5.5.110.0370.04017.26
5.5.100.0370.04617.31
5.5.90.0370.02017.22
5.5.80.0300.04717.14
5.5.70.0330.02317.14
5.5.60.0330.04717.04
5.5.50.0320.04717.33
5.5.40.0220.03417.29
5.5.30.0420.03817.23
5.5.20.0270.03117.20
5.5.10.0450.05017.14
5.5.00.0430.03317.11
5.4.450.0250.03015.28
5.4.440.0360.04015.41
5.4.430.0350.02315.37
5.4.420.0340.02715.26
5.4.410.0300.03015.28
5.4.400.0350.04115.04
5.4.390.0380.03815.21
5.4.380.0330.04015.13
5.4.370.0430.04215.21
5.4.360.0390.02615.03
5.4.350.0330.03315.09
5.4.340.0290.03715.25
5.4.330.0210.00611.15
5.4.320.0360.04315.06
5.4.310.0330.03815.16
5.4.300.0390.03515.00
5.4.290.0300.02715.26
5.4.280.0320.02015.22
5.4.270.0350.04015.02
5.4.260.0350.04515.00
5.4.250.0380.04314.90
5.4.240.0370.04315.05
5.4.230.0310.04815.03
5.4.220.0390.04215.02
5.4.210.0320.03415.02
5.4.200.0380.04415.04
5.4.190.0380.04015.20
5.4.180.0350.03014.99
5.4.170.0410.04515.00
5.4.160.0380.04015.17
5.4.150.0510.02315.01
5.4.140.0590.02513.83
5.4.130.0570.04013.74
5.4.120.0340.02713.86
5.4.110.0350.03213.84
5.4.100.0300.03013.60
5.4.90.0400.02813.80
5.4.80.0500.03213.78
5.4.70.0340.02513.54
5.4.60.0420.03913.59
5.4.50.0310.03813.76
5.4.40.0320.03213.58
5.4.30.0410.01813.86
5.4.20.0350.02913.78
5.4.10.0330.02313.72
5.4.00.0400.03513.51
5.3.290.0350.04812.80
5.3.280.0360.02412.60
5.3.270.0480.03212.69
5.3.260.0380.05112.71
5.3.250.0470.03312.69
5.3.240.0450.02712.63
5.3.230.0470.04812.67
5.3.220.0320.02212.51
5.3.210.0410.04012.51
5.3.200.0410.04512.63
5.3.190.0450.03812.64
5.3.180.0220.04812.65
5.3.170.0360.01812.63
5.3.160.0300.03112.71
5.3.150.0340.02312.68
5.3.140.0380.03112.62
5.3.130.0360.02712.62
5.3.120.0360.02012.66
5.3.110.0350.04712.59
5.3.100.0270.02912.24
5.3.90.0310.02812.44
5.3.80.0370.02212.28
5.3.70.0400.02012.35
5.3.60.0350.03812.40
5.3.50.0300.02912.25
5.3.40.0280.03612.24
5.3.30.0320.02712.37
5.3.20.0450.03412.15
5.3.10.0330.03312.19
5.3.00.0430.03812.04
5.2.170.0570.03311.08
5.2.160.0500.05311.20
5.2.150.0700.07311.12
5.2.140.0600.05311.25
5.2.130.0700.06310.99
5.2.120.0600.04311.05
5.2.110.0530.03011.26
5.2.100.0800.05011.19
5.2.90.0470.03011.19
5.2.80.0470.03311.04
5.2.70.0500.03011.25
5.2.60.0470.04010.94
5.2.50.0500.04011.05
5.2.40.0500.03010.95
5.2.30.0730.06311.02
5.2.20.0830.05710.92
5.2.10.0600.07010.80
5.2.00.0630.05310.68
5.1.60.0530.02310.09
5.1.50.0600.0439.87
5.1.40.0670.06010.07
5.1.30.0670.04710.32
5.1.20.0600.04010.42
5.1.10.0070.0379.97
5.1.00.0070.04010.18
5.0.50.0000.0208.58
5.0.40.0030.0438.29
5.0.30.0030.0438.32
5.0.20.0000.0208.29
5.0.10.0000.0338.29
5.0.00.0030.0538.29
4.4.90.0030.0278.29
4.4.80.0000.0238.29
4.4.70.0030.0378.29
4.4.60.0000.0308.29
4.4.50.0000.0378.29
4.4.40.0000.0238.29
4.4.30.0000.0178.29
4.4.20.0000.0208.29
4.4.10.0000.0138.29
4.4.00.0030.0278.29
4.3.110.0000.0408.29
4.3.100.0070.0308.29
4.3.90.0000.0178.29
4.3.80.0000.0238.29
4.3.70.0000.0208.29
4.3.60.0000.0238.29
4.3.50.0030.0338.29
4.3.40.0030.0208.29
4.3.30.0030.0108.29
4.3.20.0000.0338.29
4.3.10.0000.0138.29
4.3.00.0000.0238.29

preferences:
38.46 ms | 401 KiB | 5 Q