اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

 

الاخوة الكرام ارغب بالمساعدة في كتابة كود بالغة php لأغلاق الموقع وتحويل جميع الزوار في كل صفحات الموقع الى صفحة الاغلاق والاستعلام عن طريقة قاعدة البيانات

Recommended Posts

  • 1
نشر

وعليكم السلام ورحمة الله وبركاته.

هل لديك حاليا جدول خاص بإعدادات الموقع ؟ إذا كان لديك جدول بالفعل فقط سنضيف حقل به يسمى site_status وهو يحوى إما قيمة open أو closed .

إذا لم يكن لديك جدول بالفعل لنقم بإنشاء جدول جديد هكذا :

CREATE TABLE settings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    site_status ENUM('open', 'closed') NOT NULL DEFAULT 'open'
);

ثم لنضيف القيمة التالية له :

INSERT INTO settings (site_status) VALUES ('open');

بعد ذلك لننشأ ملف جديد يسمى check_status.php وهو الملف الذي سيتحقق من حالة الموقع في قاعدة البيانات ولو كان مغلقا سنعيد صفحة الإغلاق :

<?php
// الاتصال بقاعدة البيانات
$host = 'localhost';
$db   = 'db_name';
$user = 'user_name';
$pass = 'password';

try {
    $pdo = new PDO( "mysql:host=$host;dbname=$db", $user, $pass);
    
    // جلب حالة الموقع
    $stmt = $pdo->query("SELECT site_status FROM settings LIMIT 1");
    $row = $stmt->fetch();

    if ($row && $row['site_status'] === 'closed') {
        // إعادة التوجيه إلى صفحة الإغلاق
        header("Location: closed.php");
        exit();
    }
} catch (PDOException $e) {
    echo "Database error: " . $e->getMessage();
    exit();
}

ويمكنك الآن إنشاء ملف الإغلاق closed.php ووضع به الكود الذي تريد إظهاره للمستخدمين.

والآن في أى صفحة تريد أن تتحقق من حالة الموقع ولو كان مغلقا تريد إعادة التوجيه حينها سيتوجب عليك إستخدام السطر التالي في بداية الصفحة :

include 'check_status.php';

ولتفعيل أو إغلاق الموقع يمكنك تنفيذ الكود التالي في قاعدة البيانات :

UPDATE settings SET site_status = 'closed'; -- لإغلاق الموقع

UPDATE settings SET site_status = 'open'; -- لفتح الموقع

أما إذا أردت فيمكنك تنفيذ ذلك من خلال ملف htaccess. دون الحاجة لإستخدام قاعدة البيانات أو أكواد php . هكذا :

RewriteEngine On

# استثناء صفحة الصيانة نفسها من إعادى التوجيه
RewriteCond %{REQUEST_URI} !^/closed\.html$

# إعادة توجيه كل الزوار إلى صفحة الصيانة
RewriteRule ^.*$ /closed.html [R=302,L]

 

  • 1
نشر

يجب تهيئة قاعدة البيانات لتخزين حالة الموقع مفتوح أو مغلق من خلال جدول بسيط، عليك تنفيذ الاستعلام التالي لإنشائه من خلال phpMyAdmin:

CREATE TABLE IF NOT EXISTS settings (
  setting_key VARCHAR(100) PRIMARY KEY,
  setting_value TEXT
);

ثم أضف صفًا لتحديد حالة الصيانة، بقيمة on لتفعيل الإغلاق أو off لإلغاء الإغلاق:

INSERT INTO settings (setting_key, setting_value)
VALUES ('maintenance_mode', 'off')
ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value);

بالطبع من المفترض أن لديك صفحة صفحة الإغلاق maintenance.php أو offline.php، لعرض رسالة للزوار، وفي حال لم يكن لديك، أنشيء الملف البسيط التالي:

<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>الموقع تحت الصيانة</title>
    <style>
        body { font-family: 'Arial', sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #f8f9fa; text-align: center; direction: rtl; }
        .container { padding: 30px; background-color: #fff; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }
        h1 { color: #dc3545; }
        p { color: #6c757d; }
    </style>
</head>
<body>
    <div class="container">
        <h1>عذراً، الموقع تحت الصيانة حالياً</h1>
        <p>نحن نقوم ببعض التحديثات الضرورية لتحسين تجربتكم. سنعود قريباً!</p>
        <p>شكراً لتفهمكم.</p>
    </div>
</body>
</html>

بعد ذلك أنشئ ملف PHP جديد باسم maintenance_check.php في المجلد الرئيسي أو مجلد الإعدادات مثلاً، وسنكتب به سيتصل بقاعدة البيانات ويتحقق من الحالة، ثم يوجه الزائر حسب الحالة:

<?php
require_once __DIR__ . 'db_connection.php'; //أضف مسار ملف الإتصال بقاعدة البيانات

$maintenance_page_url = '/maintenance.php';

if (!isset($pdo) || !$pdo instanceof PDO) {
    http_response_code(503);
    header('Location: ' . $maintenance_page_url);
    exit;
}

$current_page_url = $_SERVER['REQUEST_URI'] ?? '';
if (strpos($current_page_url, basename($maintenance_page_url)) !== false) {
    return;
}

try {
    $stmt = $pdo->prepare("SELECT setting_value FROM settings WHERE setting_key = 'maintenance_mode' LIMIT 1");
    $stmt->execute();
    $maintenance_mode_status = $stmt->fetchColumn() ?: 'off';

    if ($maintenance_mode_status === 'on') {
        http_response_code(503);
        header('Location: ' . $maintenance_page_url);
        exit;
    }
} catch (PDOException $e) {
    http_response_code(503);
    header('Location: ' . $maintenance_page_url);
    exit;
}
?>

والآن نحتاج إلى أن يتم تنفيذ maintenance_check.php في بداية كل طلب  قبل أي كود HTML أو PHP آخر. 

 أضف السطر التالي في أعلى الملف الرئيسي index.php أي يجب أن يكون أول شيء يتم تنفيذه:

<?php
require_once __DIR__ . '/maintenance_check.php'; 

?>

 

  • 1
نشر
بتاريخ 2 ساعة قال m_sh:

الاخوة الكرام كلا الاكواد تعمل بكفاءة عالية ولكن هناك مشكلة في المتصفح يظهر لي بأن الموقع اعاد توجيهك الى الصفحة ورات كثيرة جدا ماهو الحل ؟ 

ما الذي قمت بفعله بالضبط لتفقد المشكلة، وأين وضعت الكود المسؤول عن التوجيه لصفحة الصيانة

  • 1
نشر
بتاريخ 20 دقائق مضت قال m_sh:

قمت بوضعه في صفحة خاصة بالفحص على حالة الجدول في قاعدة البيانات وقمت بستدعاء الملف عن طريق include ووضعته في صفحة ال Header واستدعي صفحة ال Header في كل صفحات الموقع

علما بأن الملف في localhost يعمل بكفاءة ولكن في الاستضافة لايعمل ويظهر بهذا الشكل

المشكلة أنه يتم إعادة التوجيه إلى ما لانهاية لهذا تحدث تلك المشكلة .

يبدوا أنك تقوم بإعادة التوجيه أيضا عند الوصول إلى صفحة الإغلاق . لهذا يظل الخادم يقوم بإعادة التوجيه مما يسبب مشكلة في المتصفح.

يرجى التأكد من أنك لم تقم بإستيراد ملف ال header بداخل نفسه.

  • 0
نشر

الاخوة الكرام كلا الاكواد تعمل بكفاءة عالية ولكن هناك مشكلة في المتصفح يظهر لي بأن الموقع اعاد توجيهك الى الصفحة ورات كثيرة جدا ماهو الحل ؟ 

  • 0
نشر
بتاريخ 4 دقائق مضت قال Mustafa Suleiman:

ما الذي قمت بفعله بالضبط لتفقد المشكلة، وأين وضعت الكود المسؤول عن التوجيه لصفحة الصيانة

قمت بوضعه في صفحة خاصة بالفحص على حالة الجدول في قاعدة البيانات وقمت بستدعاء الملف عن طريق include ووضعته في صفحة ال Header واستدعي صفحة ال Header في كل صفحات الموقع

بتاريخ 11 دقائق مضت قال Mustafa Suleiman:

ما الذي قمت بفعله بالضبط لتفقد المشكلة، وأين وضعت الكود المسؤول عن التوجيه لصفحة الصيانة

علما بأن الملف في localhost يعمل بكفاءة ولكن في الاستضافة لايعمل ويظهر بهذا الشكل

لقطة الشاشة 2025-04-14 223522.png

  • 0
نشر
بتاريخ 4 دقائق مضت قال محمد عاطف17:

المشكلة أنه يتم إعادة التوجيه إلى ما لانهاية لهذا تحدث تلك المشكلة .

يبدوا أنك تقوم بإعادة التوجيه أيضا عند الوصول إلى صفحة الإغلاق . لهذا يظل الخادم يقوم بإعادة التوجيه مما يسبب مشكلة في المتصفح.

يرجى التأكد من أنك لم تقم بإستيراد ملف ال header بداخل نفسه.

تعجز الكلمات عن شكرك مهندس محمد اسأل الله ان يفك عنك كربك ويوفقك 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...