56 lines
2.0 KiB
PHP
56 lines
2.0 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>PHP Sandbox</title>
|
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
|
<link rel="stylesheet" href="assets/css/vibe.css">
|
|
</head>
|
|
<body>
|
|
<?php include 'navbar.php'; ?>
|
|
<div class="container mt-5">
|
|
<h1>PHP Sandbox</h1>
|
|
<p>Write and execute PHP code in a sandboxed environment.</p>
|
|
<form method="post">
|
|
<div class="form-group">
|
|
<textarea name="code" class="form-control" rows="10" placeholder="Enter your PHP code here..."><?php echo isset($_POST['code']) ? htmlspecialchars($_POST['code']) : ''; ?></textarea>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary">Execute</button>
|
|
</form>
|
|
<hr>
|
|
<?php
|
|
function execute_php_code($code) {
|
|
if (strpos(trim($code), '<?php') !== 0) {
|
|
$code = '<?php ' . $code;
|
|
}
|
|
$descriptorspec = [
|
|
0 => ["pipe", "r"],
|
|
1 => ["pipe", "w"],
|
|
2 => ["pipe", "w"]
|
|
];
|
|
$process = proc_open('php', $descriptorspec, $pipes);
|
|
if (is_resource($process)) {
|
|
fwrite($pipes[0], $code);
|
|
fclose($pipes[0]);
|
|
$output = stream_get_contents($pipes[1]);
|
|
fclose($pipes[1]);
|
|
$error = stream_get_contents($pipes[2]);
|
|
fclose($pipes[2]);
|
|
proc_close($process);
|
|
return $output ?: $error;
|
|
}
|
|
return 'Failed to create process.';
|
|
}
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['code'])) {
|
|
$code = $_POST['code'];
|
|
$output = execute_php_code($code);
|
|
echo '<h3>Output:</h3>';
|
|
echo '<pre>' . htmlspecialchars($output) . '</pre>';
|
|
}
|
|
?>
|
|
</div>
|
|
</body>
|
|
</html>
|