NginxManager/servers.php
2025-08-04 17:11:47 +08:00

83 lines
2.5 KiB
PHP

<?php
session_start();
$confDir = realpath('/Users/catantech/Desktop/Project/php/nginx-manager/conf/conf.d');
$nginxExe = '/opt/homebrew/bin/nginx';
if (!$confDir) {
die("❌ 找不到 conf.d 目錄");
}
function reloadNginx() {
global $nginxExe;
$configPath = '/opt/homebrew/etc/nginx/nginx.conf'; // 請根據實際路徑調整
$cmd = "\"$nginxExe\" -s reload -c \"$configPath\" 2>&1";
exec($cmd, $output, $code);
return ['code' => $code, 'output' => $output];
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$port = intval($_POST['port']);
$confFile = "$confDir/{$port}.conf";
$resultMsg = '';
if ($_POST['action'] === 'add') {
$baseDir = '/Users/catantech/Desktop/';
$relativeRoot = trim($_POST['root']);
// 防止目錄跳脫
if (strpos($relativeRoot, '..') !== false) {
$resultMsg = " Root 路徑不能包含 '..' ";
} else {
// 拼接完整路徑
$fullRoot = rtrim($baseDir, '/') . '/' . ltrim($relativeRoot, '/');
$serverBlock = <<<CONF
server {
listen $port;
server_name localhost;
location / {
root $fullRoot;
index index.html;
try_files \$uri \$uri/ /index.html;
}
}
CONF;
$writeOk = file_put_contents($confFile, $serverBlock) !== false;
if (!$writeOk) {
$resultMsg = " 寫入設定檔失敗";
} else {
$reload = reloadNginx();
if ($reload['code'] !== 0) {
$resultMsg = " NGINX 重啟失敗:" . implode("\n", $reload['output']);
} else {
$resultMsg = " 新增 Server 成功,並已重啟 NGINX";
}
}
}
} elseif ($_POST['action'] === 'delete') {
if (file_exists($confFile)) {
$delOk = unlink($confFile);
if (!$delOk) {
$resultMsg = " 刪除設定檔失敗";
} else {
$reload = reloadNginx();
if ($reload['code'] !== 0) {
$resultMsg = " NGINX 重啟失敗:" . implode("\n", $reload['output']);
} else {
$resultMsg = " 刪除 Server 成功,並已重啟 NGINX";
}
}
} else {
$resultMsg = " 設定檔不存在";
}
}
$_SESSION['resultMsg'] = $resultMsg;
header("Location: index.php");
exit;
}