ساخت سیستم مدیریت تنظیمات

ساخت سیستم مدیریت تنظیمات با PHP

ساخت سیستم مدیریت تنظیمات با PHP

سیستم‌های مدیریت تنظیمات (Configuration Management Systems) ابزارهای حیاتی در توسعه و نگهداری نرم‌افزار هستند. این سیستم‌ها به توسعه‌دهندگان اجازه می‌دهند تا تنظیمات برنامه را به صورت متمرکز مدیریت کنند، بدون نیاز به تغییر مستقیم در کد منبع. این امر انعطاف‌پذیری، قابلیت نگهداری و امنیت برنامه را به طور قابل توجهی افزایش می‌دهد. در این مقاله، به بررسی نحوه ساخت یک سیستم مدیریت تنظیمات ساده اما کاربردی با استفاده از PHP خواهیم پرداخت.

چرا به سیستم مدیریت تنظیمات نیاز داریم؟

در بسیاری از برنامه‌ها، تنظیماتی وجود دارند که باید به راحتی قابل تغییر باشند. این تنظیمات می‌توانند شامل اطلاعات اتصال به پایگاه داده، کلیدهای API، مسیرهای فایل، تنظیمات نمایش و غیره باشند. بدون یک سیستم مدیریت تنظیمات مناسب، تغییر این تنظیمات می‌تواند دشوار و مستعد خطا باشد. برخی از مزایای استفاده از یک سیستم مدیریت تنظیمات عبارتند از:

  • انعطاف‌پذیری: امکان تغییر تنظیمات بدون نیاز به تغییر کد منبع
  • قابلیت نگهداری: مدیریت متمرکز تنظیمات، یافتن و اصلاح خطاها را آسان‌تر می‌کند.
  • امنیت: امکان ذخیره تنظیمات حساس به صورت امن و کنترل دسترسی به آن‌ها
  • قابلیت استفاده مجدد: امکان استفاده از تنظیمات در چندین برنامه یا محیط مختلف
  • مدیریت محیطی: امکان داشتن تنظیمات مختلف برای محیط‌های توسعه، تست و تولید

طراحی سیستم

سیستم مدیریت تنظیمات ما شامل دو بخش اصلی خواهد بود:

  1. بخش رابط کاربری (UI): این بخش به مدیران سیستم اجازه می‌دهد تا تنظیمات را مشاهده، اضافه، ویرایش و حذف کنند.
  2. بخش منطق (Logic): این بخش مسئول ذخیره، بازیابی و اعتبارسنجی تنظیمات است.

برای ذخیره تنظیمات، می‌توان از پایگاه داده استفاده کرد. در این مثال، از یک جدول ساده در MySQL استفاده خواهیم کرد. ساختار جدول به شرح زیر است:

CREATE TABLE settings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    key VARCHAR(255) NOT NULL UNIQUE,
    value TEXT NOT NULL
);

این جدول دارای دو ستون اصلی است: key که نام تنظیم را ذخیره می‌کند و value که مقدار تنظیم را ذخیره می‌کند. ستون key به صورت UNIQUE تعریف شده است تا از تکرار نام تنظیمات جلوگیری شود.

پیاده‌سازی با PHP

در این بخش، به پیاده‌سازی بخش منطق سیستم با استفاده از PHP خواهیم پرداخت. ابتدا، یک فایل به نام config.php ایجاد می‌کنیم که شامل توابع اصلی سیستم است.

اتصال به پایگاه داده

ابتدا، باید به پایگاه داده متصل شویم. برای این کار، از PDO (PHP Data Objects) استفاده خواهیم کرد.

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}
?>

به جای مقادیر placeholder، اطلاعات اتصال به پایگاه داده خود را وارد کنید.

توابع اصلی

اکنون، توابع اصلی سیستم را پیاده‌سازی می‌کنیم:

  • getSetting($key): این تابع مقدار تنظیم با نام مشخص شده را از پایگاه داده بازیابی می‌کند.
  • setSetting($key, $value): این تابع مقدار تنظیم با نام مشخص شده را در پایگاه داده ذخیره می‌کند.
  • deleteSetting($key): این تابع تنظیم با نام مشخص شده را از پایگاه داده حذف می‌کند.
  • getAllSettings(): این تابع تمام تنظیمات را از پایگاه داده بازیابی می‌کند.
prepare("SELECT value FROM settings WHERE key = :key");
    $stmt->bindParam(':key', $key);
    $stmt->execute();
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    return $result ? $result['value'] : null;
}

function setSetting($key, $value) {
    global $pdo;
    try {
        $stmt = $pdo->prepare("INSERT INTO settings (key, value) VALUES (:key, :value) ON DUPLICATE KEY UPDATE value = :value");
        $stmt->bindParam(':key', $key);
        $stmt->bindParam(':value', $value);
        $stmt->execute();
        return true;
    } catch (PDOException $e) {
        return false;
    }
}

function deleteSetting($key) {
    global $pdo;
    $stmt = $pdo->prepare("DELETE FROM settings WHERE key = :key");
    $stmt->bindParam(':key', $key);
    $stmt->execute();
    return $stmt->rowCount() > 0;
}

function getAllSettings() {
    global $pdo;
    $stmt = $pdo->prepare("SELECT key, value FROM settings");
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
?>

رابط کاربری

اکنون، یک رابط کاربری ساده برای مدیریت تنظیمات ایجاد می‌کنیم. این رابط کاربری شامل یک فرم برای اضافه کردن تنظیمات جدید، یک جدول برای نمایش تنظیمات موجود و دکمه‌هایی برای ویرایش و حذف تنظیمات خواهد بود.

<!DOCTYPE html>
<html>
<head>
    <title>مدیریت تنظیمات</title>
</head>
<body>

    <h1>مدیریت تنظیمات</h1>

    <form method="post" action="config_handler.php">
        <label for="key">نام تنظیم:</label>
        <input type="text" id="key" name="key" required><br>

        <label for="value">مقدار تنظیم:</label>
        <textarea id="value" name="value" required></textarea><br>

        <button type="submit">ذخیره تنظیم</button>
    </form>

    <table>
        <thead>
            <tr>
                <th>نام تنظیم</th>
                <th>مقدار تنظیم</th>
                <th>عملیات</th>
            </tr>
        </thead>
        <tbody>
            <?php
            $settings = getAllSettings();
            foreach ($settings as $setting) {
                echo "<tr>";
                echo "<td>" . htmlspecialchars($setting['key']) . "</td>";
                echo "<td>" . htmlspecialchars($setting['value']) . "</td>";
                echo "<td><a href='config_edit.php?key=" . urlencode($setting['key']) . "'>ویرایش</a> | <a href='config_delete.php?key=" . urlencode($setting['key']) . "'>حذف</a></td>";
                echo "</tr>";
            }
            ?>
        </tbody>
    </table>

</body>
</html>

فایل‌های کمکی

برای مدیریت عملیات ویرایش و حذف، دو فایل کمکی به نام‌های config_edit.php و config_delete.php ایجاد می‌کنیم.

config_edit.php:

<?php
include 'config.php';

if (isset($_GET['key'])) {
    $key = $_GET['key'];
    $value = getSetting($key);

    if ($value !== null) {
        echo "<form method='post' action='config_update.php'>";
        echo "<input type='hidden' name='key' value='" . htmlspecialchars($key) . "'>";
        echo "<label for='value'>مقدار تنظیم:</label>";
        echo "<textarea id='value' name='value'>" . htmlspecialchars($value) . "</textarea>";
        echo "<button type='submit'>به‌روزرسانی</button>";
        echo "</form>";
    } else {
        echo "تنظیم یافت نشد.";
    }
} else {
    echo "کلید تنظیم مشخص نشده است.";
}
?>

config_delete.php:

<?php
include 'config.php';

if (isset($_GET['key'])) {
    $key = $_GET['key'];
    if (deleteSetting($key)) {
        echo "تنظیم با موفقیت حذف شد.";
    } else {
        echo "حذف تنظیم با خطا مواجه شد.";
    }
} else {
    echo "کلید تنظیم مشخص نشده است.";
}
?>

config_handler.php:

<?php
include 'config.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $key = $_POST["key"];
    $value = $_POST["value"];

    if (setSetting($key, $value)) {
        header("Location: index.php"); // Redirect to the main page
        exit();
    } else {
        echo "خطا در ذخیره تنظیم.";
    }
}
?>

config_update.php:

<?php
include 'config.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $key = $_POST["key"];
    $value = $_POST["value"];

    if (setSetting($key, $value)) {
        header("Location: index.php"); // Redirect to the main page
        exit();
    } else {
        echo "خطا در به‌روزرسانی تنظیم.";
    }
}
?>

نکات تکمیلی

این یک سیستم مدیریت تنظیمات ساده است و می‌توان آن را با افزودن ویژگی‌های بیشتر بهبود بخشید. برخی از این ویژگی‌ها عبارتند از:

  • اعتبارسنجی ورودی: اطمینان از اینکه مقادیر ورودی معتبر هستند.
  • رمزنگاری: رمزنگاری تنظیمات حساس برای افزایش امنیت.
  • کنترل دسترسی: محدود کردن دسترسی به تنظیمات بر اساس نقش کاربر.
  • نسخه‌بندی: ذخیره تاریخچه تغییرات تنظیمات.
  • رابط کاربری پیشرفته: استفاده از فریم‌ورک‌های CSS و JavaScript برای ایجاد یک رابط کاربری جذاب‌تر و کاربرپسندتر.

با استفاده از این اصول و تکنیک‌ها، می‌توانید یک سیستم مدیریت تنظیمات قدرتمند و انعطاف‌پذیر برای برنامه‌های PHP خود ایجاد کنید.