План действий
- Безопасность: Прежде всего, нужно обеспечить безопасность выполнения пользовательского кода. Нельзя разрешать прямой доступ к системным функциям и запретить опасные операции.
- Интерфейс: Нужно спроектировать простой и удобный интерфейс для ввода кода и вывода результата.
- Обработка кода: После ввода кода пользовательский PHP-код будет отправлен на сервер для выполнения.
- Вывод результата: Результат выполнения кода будет показан пользователю в удобном виде.
Пример реализации
Безопасность
Используем sandbox-окружение для выполнения кода. Можно ограничить доступ к опасным функциям с помощью отключения опасных функций в PHP:
ВыделитьPHP
// Устанавливаем ограничения для безопасности
ini_set('disable_functions', 'exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source');
ini_set('memory_limit', '64M');
ini_set('max_execution_time', '30');Интерфейс
Простой HTML-интерфейс для ввода и вывода:
ВыделитьHTML | PHP
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Online PHP Execution</title>
</head>
<body>
<h1>PHP Executor</h1>
<form method="post">
<textarea name="code" rows="10" cols="50"><?php echo isset($_POST['code']) ? htmlspecialchars($_POST['code']) : ""; ?></textarea>
<br>
<input type="submit" value="Run Code">
</form>
<hr>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$code = $_POST['code'];
ob_start();
eval('?>'.$code.'<?php ');
$output = ob_get_clean();
echo nl2br(htmlspecialchars($output));
}
?>
</body>
</html>Обработка кода
Введённый пользователем код отправляется на сервер, где выполняется в ограниченном окружении с соблюдением мер безопасности.
Вывод результата
Результат выполнения кода выводится на экран.
Что нужно учитывать
- Безопасность: Обязательно запрещайте опасные функции и контролируйте выполнение кода.
- Ограничения: Установите лимиты на память и время выполнения, чтобы предотвратить злоупотребления.
- Логирование: Ведите логи выполнения кода для мониторинга и устранения неполадок.
Теперь у тебя есть простая реализация онлайн-исполнителя PHP-кода.