3v4l.org

run code in 300+ PHP versions simultaneously
<?php setlocale(LC_CTYPE, "ru_RU.UTF-8"); require '../include/config.php'; require '../include/functions.php'; session_start(); // Если пользователь не авторизован, но выставлена // cookie-переменная autologin - входим на форум if ( !isset( $_SESSION['user'] ) and isset( $_COOKIE['autologin'] ) ) autoLogin(); // Подключаем дополнительную таблицу стилей если передан параметр if ( !isset( $style ) ) { $style = '<style type="text/css">'."\r\n"; $style = $style. file_get_contents( '../style/admin.css' )."\r\n"; $style = $style.'</style>'."\r\n"; } // Загрузка шаблона и замена переменных $html = file_get_contents( '../templates/admin.html' ); $html = str_replace( '{title}', $pageTitle, $html ); $html = str_replace( '{description}', $description, $html ); $html = str_replace( '{nav}', $nav, $html ); $html = str_replace( '{content}', $content, $html ); $html = str_replace( '{style}', $style, $html ); echo $html; // Функция возвращает html формы для авторизации function getLoginForm( &$style ) { $html = $html.'<form class="form-signin" action="?action=login" method="post">'."\r\n"; if ( isset( $_SESSION['loginForm']['error'] ) ) { $info = file_get_contents( '../templates/info.html' ); $info = str_replace( '{infoMessage}', $_SESSION['loginForm']['error'], $info ); $html = $html.$info."\r\n"; unset( $_SESSION['loginForm']['error'] ); } $html = $html.'<h2 class="form-signin-heading">Вход</h2>'."\r\n"; $html = $html.' <input class="input-block-level" placeholder="Логин" name="login" type="text" size="15" maxlength="15">'."\r\n"; $html = $html.'<input class="input-block-level" placeholder="Пароль" name="password" type="password" size="15" maxlength="40">'."\r\n"; $html = $html.'<label class="checkbox">'."\r\n"; $html = $html.'<input name="autologin" type="checkbox" value="1"> Запомнить меня'."\r\n"; $html = $html.'</label>'."\r\n"; $html = $html.'<button class="btn btn-large btn-primary" type="submit" name="submit">Войти</button>'."\r\n"; $html = $html.'</form>'."\r\n"; $style = '<style type="text/css">'."\r\n"; $style = $style. file_get_contents( '../style/login.css' )."\r\n"; $style = $style.'</style>'."\r\n"; return $html; } // Обработчик формы авторизации function login() { global $connection; // Если не переданы данные формы - значит функция была вызвана по ошибке if ( !isset( $_POST['login'] ) or !isset( $_POST['password'] ) ) { header( 'Location: '.$_SERVER['PHP_SELF'] ); die(); } // Защита от перебора пароля - при каждой неудачной попытке время задержки увеличивается if ( isset( $_SESSION['loginForm']['count'] ) ) sleep( $_SESSION['loginForm']['count'] ); // Обрезаем переменные до длины, указанной в параметре maxlength тега input $login = substr( $_POST['login'], 0, 40 ); $password = substr( $_POST['password'], 0, 40 ); // Обрезаем лишние пробелы $login = trim( $login ); $password = trim( $password ); // Проверяем, заполнены ли обязательные поля $error = ''; if ( empty( $login ) ) $error = $error.'<li>не заполнено поле "Имя"</li>'."\r\n"; if ( empty( $password ) ) $error = $error.'<li>не заполнено поле "Пароль"</li>'."\r\n"; // Проверяем поля формы на недопустимые символы //if ( !empty( $name ) and !preg_match( "#^[- _0-9a-zА-Яа-я]+$#i", $name ) ) // $error = $error.'<li>поле "Имя" содержит недопустимые символы</li>'."\n"; //if ( !empty( $password ) and !preg_match( "#^[-_0-9a-z]+$#i", $password ) ) // $error = $error.'<li>поле "Пароль" содержит недопустимые символы</li>'."\n"; // Указываем "соль" для пароля и шифруем пароль $salt = "yD4@1bTySXq9vb"; $password = sha1($salt . $password); // Проверять существование такого пользователя есть смысл только в том // случае, если поля не пустые и не содержат недопустимых символов if ( empty( $error ) ) { // Выполняем запрос на получение данных пользователя из БД $query = "SELECT * FROM users WHERE login='".$login."' AND password='".$password."' LIMIT 1"; //извлекаем из базы все данные о пользователе с введенным логином $result = mysqli_query( $connection, $query ); if ( !$result ) { $msg = 'Ошибка при авторизации пользователя'; $err = 'Ошибка при выполнении запроса: <br/>'. $query.'<br/>'.mysqli_errno().':&nbsp;'.mysqli_error().'<br/>'.'(Файл '. __FILE__ .', строка '. __LINE__ .')'; return showErrorMessage( $msg, $err, true, 'action=loginForm' ); } if ( mysqli_num_rows( $result ) == 0 ) $error = $error.'<li>Неправильный логин или пароль</li>'."\n"; } // Если были допущены ошибки при заполнении формы if ( !empty( $error ) ) { if ( !isset( $_SESSION['loginForm']['count'] ) ) $_SESSION['loginForm']['count'] = 1; else $_SESSION['loginForm']['count'] = $_SESSION['loginForm']['count'] + 1; $_SESSION['loginForm']['error'] = '<br>'."\r\n".'При заполнениии формы были допущены ошибки:'. "\r\n".'<ul>'."\r\n".$error.'</ul>'."\r\n"; header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' ); die(); } // Все поля заполнены правильно и такой пользователь существует - продолжаем unset( $_SESSION['loginForm'] ); $user = mysqli_fetch_assoc( $result ); if ( $user['activation'] == '0' ) return showInfoMessage( 'Ваша учетная запись не активирована', '' ); // Если пользователь заблокирован if ( $user['status'] != 'admin' ) return showInfoMessage( 'Недостаточно прав доступа. Обратитесь к администратору.', '' ); $_SESSION['user'] = $user; // Выставляем cookie, если пользователь хочет входить на форум автоматически if ( isset ( $_POST['autologin'] ) ) { $tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1; $path = substr( $_SERVER['PHP_SELF'], 0, $tmppos ); setcookie( 'autologin', 'yes', time() + 3600*24*30, $path ); setcookie( 'login', $_SESSION['user']['login'], time() + 3600*24*30, $path ); setcookie( 'password', $_SESSION['user']['password'], time() + 3600*24*30, $path ); } // Авторизация прошла успешно - перенаправляем посетителя на главную страницу header( 'Location: '.$_SERVER['PHP_SELF'].'?action=pages' ); die(); } // Функция осуществляет автоматический вход на форум function autoLogin() { global $connection; // Если не установлены cookie, содержащие логин и пароль if ( !isset( $_COOKIE['login'] ) or !isset( $_COOKIE['password'] ) ) { $tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1; $path = substr( $_SERVER['PHP_SELF'], 0, $tmppos ); if ( isset( $_COOKIE['login'] ) ) setcookie( 'login', '', time() - 1, $path ); if ( isset( $_COOKIE['password'] ) ) setcookie( 'password', '', time() - 1, $path ); if ( isset( $_COOKIE['autologin'] ) ) setcookie( 'autologin', '', time() - 1, $path ); return false; } // Проверяем переменные cookie на недопустимые символы //$login = preg_replace( "#[^- _0-9a-zА-Яа-я]#i", '', $_COOKIE['login'] ); $login = $_COOKIE['login']; // Т.к. пароль зашифрован с помощью sha1, то он представляет собой // 40-значное шестнадцатеричное число $password = substr( $_COOKIE['password'], 0, 40 ); //$password = preg_replace( "#[^0-9a-f]#i", '', $password ); // Выполняем запрос на получение данных пользователя из БД $query = "SELECT * FROM users WHERE login='".$login."' AND password='".$password."' LIMIT 1"; $result = mysqli_query( $connection, $query ); if ( !$result ) { $msg = 'Ошибка при авторизации пользователя'; $err = 'Ошибка при выполнении запроса: <br/>'. $query.'<br/>'.mysqli_errno().':&nbsp;'.mysqli_error().'<br/>'.'(Файл '. __FILE__ .', строка '. __LINE__ .')'; return showErrorMessage( $msg, $err, true, '' ); } // Если пользователь с таким логином и паролем не найден - // значит данные неверные и надо их удалить if ( mysqli_num_rows( $result ) == 0 ) { $tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1; $path = substr( $_SERVER['PHP_SELF'], 0, $tmppos ); setcookie( 'autologin', '', time() - 1, $path ); setcookie( 'login', '', time() - 1, $path ); setcookie( 'password', '', time() - 1, $path ); return false; } $user = mysqli_fetch_assoc( $result ); if ( $user['activation'] == '0' ) { $tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1; $path = substr( $_SERVER['PHP_SELF'], 0, $tmppos ); setcookie( 'autologin', '', time() - 1, $path ); setcookie( 'login', '', time() - 1, $path ); setcookie( 'password', '', time() - 1, $path ); return showInfoMessage( 'Ваша учетная запись не активирована', '' ); } if ( $user['status'] != 'admin' ) { $tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1; $path = substr( $_SERVER['PHP_SELF'], 0, $tmppos ); setcookie( 'autologin', '', time() - 1, $path ); setcookie( 'login', '', time() - 1, $path ); setcookie( 'password', '', time() - 1, $path ); return showInfoMessage( 'Недостаточно прав доступа. Обратитесь к администратору.', '' ); } $_SESSION['user'] = $user; return true; } // Выход из системы function logout() { unset( $_SESSION['user'] ); $tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1; $path = substr( $_SERVER['PHP_SELF'], 0, $tmppos ); if ( isset( $_COOKIE['autologin'] ) ) setcookie( 'autologin', '', time() - 1, $path ); if ( isset( $_COOKIE['login'] ) ) setcookie( 'login', '', time() - 1, $path ); if ( isset( $_COOKIE['password'] ) ) setcookie( 'password', '', time() - 1, $path ); header( 'Location: '.$_SERVER['PHP_SELF'] ); die(); } // Загрузчик файлов (массив $_FILES) // Используется при добавлении и редактировании страниц, новостей function uploader($id, $marker, $path) { global $connection; $filepath = array(); $filename = array(); for( $i = 0; $i < count($_FILES['file']); $i++) { if ( !empty( $_FILES['file']['tmp_name'][$i] ) and $_FILES['file']['error'][$i] == 0 ) { $filepath = $_FILES['file']['tmp_name'][$i]; $filename = $_FILES['file']['name'][$i]; $upload_path = $path;//папка, куда будет загружаться начальная картинка $target = $upload_path . $filename; move_uploaded_file($filepath, $target);//загрузка оригинала в папку $path_to $path_parts = pathinfo($filename); $ext = $path_parts['extension']; $name = $path_parts['filename']; $new_name = translitIt($name).".".$ext; chmod($target, 0755); rename($target, $upload_path.$new_name); $query= "INSERT INTO files (parent, marker, file_name, file_url) VALUES ('".$id."', '".$marker."', '".$name."', '".$new_name."')"; $result = mysqli_query( $connection, $query ); //обработчик ошибки if(!$result) { echo "Возникла ошибка - ".mysqli_error()."\n"; echo $query; exit(); } } } } ?>

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.3.60.0080.00818.81
8.3.50.0340.00622.24
8.3.40.0120.00319.17
8.3.30.0120.00319.57
8.3.20.0050.00320.86
8.3.10.0050.00322.42
8.3.00.0060.00322.80
8.2.180.0100.00617.38
8.2.170.0100.01022.96
8.2.160.0060.01321.23
8.2.150.0080.00024.18
8.2.140.0040.00424.66
8.2.130.0080.00026.16
8.2.120.0080.00019.73
8.2.110.0070.00320.97
8.2.100.0120.00018.30
8.2.90.0050.00319.58
8.2.80.0060.00318.55
8.2.70.0060.00618.00
8.2.60.0090.00018.43
8.2.50.0040.00418.13
8.2.40.0040.00818.66
8.2.30.0090.00318.63
8.2.20.0040.00418.29
8.2.10.0000.00818.35
8.2.00.0050.00518.34
8.1.280.0040.01125.92
8.1.270.0080.00024.29
8.1.260.0040.00426.35
8.1.250.0060.00328.09
8.1.240.0030.00624.26
8.1.230.0040.00819.47
8.1.220.0060.00318.28
8.1.210.0000.00818.77
8.1.200.0140.00017.73
8.1.190.0040.00418.02
8.1.180.0040.00418.10
8.1.170.0060.00319.21
8.1.160.0080.00022.58
8.1.150.0030.00919.02
8.1.140.0120.00617.95
8.1.130.0040.00418.32
8.1.120.0000.00717.95
8.1.110.0030.00517.86
8.1.100.0000.00817.93
8.1.90.0050.00317.93
8.1.80.0040.00417.88
8.1.70.0000.00717.96
8.1.60.0080.00418.05
8.1.50.0000.00918.06
8.1.40.0040.00417.96
8.1.30.0040.00418.10
8.1.20.0080.00018.13
8.1.10.0000.00918.31
8.1.00.0030.00618.09
8.0.300.0040.00418.77
8.0.290.0000.00717.91
8.0.280.0000.00718.99
8.0.270.0050.00217.95
8.0.260.0040.00717.44
8.0.250.0030.00317.70
8.0.240.0000.00717.64
8.0.230.0020.00517.63
8.0.220.0000.00717.66
8.0.210.0040.00417.66
8.0.200.0030.00317.64
8.0.190.0030.00517.54
8.0.180.0070.00417.63
8.0.170.0000.00817.53
8.0.160.0000.00817.58
8.0.150.0000.00917.51
8.0.140.0030.00617.59
8.0.130.0030.00313.99
8.0.120.0030.00517.49
8.0.110.0040.00417.71
8.0.100.0000.00817.60
8.0.90.0080.00017.65
8.0.80.0030.01417.52
8.0.70.0000.00817.56
8.0.60.0000.00817.44
8.0.50.0000.00717.66
8.0.30.0100.01117.67
8.0.20.0130.00617.58
8.0.10.0060.00317.69
8.0.00.0180.01117.29
7.4.330.0030.00315.54
7.4.320.0000.00817.21
7.4.300.0000.00617.09
7.4.290.0040.00417.08
7.4.280.0030.00917.27
7.4.270.0120.00417.11
7.4.260.0070.00316.95
7.4.250.0000.00717.10
7.4.240.0050.00217.21
7.4.230.0040.00417.25
7.4.220.0140.00417.21
7.4.210.0080.01117.23
7.4.200.0030.00517.14
7.4.190.0000.00717.27
7.4.160.0030.01317.22
7.4.150.0120.00817.40
7.4.140.0100.01117.86
7.4.130.0120.00717.18
7.4.120.0120.00517.04
7.4.110.0030.01317.09
7.4.100.0170.00717.29
7.4.90.0110.00717.20
7.4.80.0060.01517.14
7.4.70.0090.01517.23
7.4.60.0150.00917.07
7.4.50.0050.00017.05
7.4.40.0040.01822.77
7.4.30.0130.00316.89
7.4.00.0040.01415.27
7.3.330.0030.00313.71
7.3.320.0050.00013.72
7.3.310.0070.00016.66
7.3.300.0040.00416.74
7.3.290.0120.00616.95
7.3.280.0120.00816.83
7.3.270.0100.00717.40
7.3.260.0130.01016.91
7.3.250.0030.01516.92
7.3.240.0100.01016.89
7.3.230.0100.01616.98
7.3.210.0120.00616.87
7.3.200.0090.00919.39
7.3.190.0190.00616.86
7.3.180.0080.01216.93
7.3.170.0100.00716.92
7.3.160.0100.00716.72
7.3.120.0000.01815.00
7.3.10.0050.00616.67
7.3.00.0070.00716.52
7.2.330.0040.01517.22
7.2.320.0100.01017.24
7.2.310.0190.00317.15
7.2.300.0070.01117.03
7.2.290.0070.01016.89
7.2.130.0100.00616.82
7.2.120.0050.00716.63
7.2.110.0070.00816.77
7.2.100.0090.00516.49
7.2.90.0070.00716.72
7.2.80.0110.00516.79
7.2.70.0060.00616.67
7.2.60.0040.01016.83
7.2.50.0100.00716.85
7.2.40.0100.00116.77
7.2.30.0070.00616.60
7.2.20.0100.00516.67
7.2.10.0070.00416.84
7.2.00.0030.01016.94
7.1.250.0090.00315.62
7.1.200.0090.00615.79
7.1.100.0040.01117.94
7.1.70.0030.00617.04
7.1.60.0090.00919.82
7.1.50.0030.00916.98
7.1.00.0030.07722.46
7.0.200.0080.00416.71
7.0.140.0000.07722.18
7.0.100.0470.08020.13
7.0.90.0370.08720.18
7.0.80.0400.07320.12
7.0.70.0100.08720.07
7.0.60.0270.04720.04
7.0.50.0500.07720.39
7.0.40.0100.07320.13
7.0.30.0030.07320.09
7.0.20.0170.05020.09
7.0.10.0070.07720.08
7.0.00.0100.07720.04
5.6.280.0030.07321.15
5.6.250.0070.07020.68
5.6.240.0030.08320.72
5.6.230.0030.06720.74
5.6.220.0130.07720.76
5.6.210.0100.07320.73
5.6.200.0100.08021.18
5.6.190.0130.07721.16
5.6.180.0100.08021.12
5.6.170.0030.06721.20
5.6.160.0170.07021.09
5.6.150.0100.06321.12
5.6.140.0030.07021.03
5.6.130.0030.04321.21
5.6.120.0100.07321.02
5.6.110.0030.07721.12
5.6.100.0100.07721.12
5.6.90.0030.08321.22
5.6.80.0030.04020.47
5.6.70.0030.07320.57
5.6.60.0100.07020.45
5.6.50.0130.07020.52
5.6.40.0100.07320.55
5.6.30.0100.06020.50
5.6.20.0100.06720.46
5.6.10.0070.03720.49
5.6.00.0030.04020.36
5.5.380.0030.08320.40
5.5.370.0130.07020.58
5.5.360.0070.06720.42
5.5.350.0070.07720.39
5.5.340.0070.08020.87
5.5.330.0100.08020.90
5.5.320.0000.04320.85
5.5.310.0100.03320.84
5.5.300.0000.07320.88
5.5.290.0100.07720.91
5.5.280.0030.08020.96
5.5.270.0100.03720.85
5.5.260.0100.06320.96
5.5.250.0170.07320.67
5.5.240.0030.04020.27
5.5.230.0170.07320.32
5.5.220.0100.07720.14
5.5.210.0030.07020.19
5.5.200.0070.07720.15
5.5.190.0030.05320.36
5.5.180.0100.07720.32
5.5.160.0170.07020.34
5.5.150.0100.07320.32
5.5.140.0030.07320.32
5.5.130.0100.06720.19
5.5.120.0030.07320.07
5.5.110.0070.07020.26
5.5.100.0070.08020.20
5.5.90.0130.06720.14
5.5.80.0030.07720.18
5.5.70.0100.07320.05
5.5.60.0000.07320.17
5.5.50.0100.06719.98
5.5.40.0030.03720.20
5.5.30.0030.08020.19
5.5.20.0100.07720.17
5.5.10.0230.06320.15
5.5.00.0030.08020.19
5.4.450.0030.07319.23
5.4.440.0100.06019.39
5.4.430.0130.06719.23
5.4.420.0130.03019.51
5.4.410.0100.06319.13
5.4.400.0000.06018.91
5.4.390.0070.07019.16
5.4.380.0030.07319.06
5.4.370.0070.08019.05
5.4.360.0100.03319.19
5.4.350.0100.06318.92
5.4.340.0130.04018.92
5.4.320.0030.04019.05
5.4.310.0070.07019.09
5.4.300.0070.03719.07
5.4.290.0100.07019.17
5.4.280.0030.07019.14
5.4.270.0000.07319.13
5.4.260.0100.05719.13
5.4.250.0130.07319.15
5.4.240.0130.07019.07
5.4.230.0100.07319.05
5.4.220.0030.07319.04
5.4.210.0070.08019.04
5.4.200.0000.08019.04
5.4.190.0000.07319.18
5.4.180.0030.07719.13
5.4.170.0000.07319.18
5.4.160.0000.07318.90
5.4.150.0100.07019.05
5.4.140.0030.03716.42
5.4.130.0100.06016.31
5.4.120.0070.06316.52
5.4.110.0100.07016.50
5.4.100.0070.06316.58
5.4.90.0070.07716.41
5.4.80.0100.07016.47
5.4.70.0030.03716.42
5.4.60.0070.03316.45
5.4.50.0030.03716.37
5.4.40.0030.07316.41
5.4.30.0030.05716.40
5.4.20.0030.03316.52
5.4.10.0130.07016.36
5.4.00.0030.03315.94
5.3.290.0030.07014.93
5.3.280.0100.06314.82
5.3.270.0070.07314.72
5.3.260.0100.03314.73
5.3.250.0000.08014.85
5.3.240.0030.03714.76
5.3.230.0100.03014.72
5.3.220.0100.06014.75
5.3.210.0030.05714.84
5.3.200.0100.07014.68
5.3.190.0130.06314.70
5.3.180.0030.03714.68
5.3.170.0030.07014.73
5.3.160.0030.07014.83
5.3.150.0100.07314.64
5.3.140.0030.07014.66
5.3.130.0030.05714.66
5.3.120.0000.07314.70
5.3.110.0070.07314.77
5.3.100.0100.03014.14
5.3.90.0030.03714.16
5.3.80.0070.03014.12
5.3.70.0030.07314.17
5.3.60.0000.04714.09
5.3.50.0030.07714.05
5.3.40.0070.07014.06
5.3.30.0100.04314.11
5.3.20.0070.06713.89
5.3.10.0070.06713.89
5.3.00.0070.03313.91

preferences:
41.92 ms | 401 KiB | 5 Q