تخزين منتديات PHP/MySQL الديناميكية بشكل دائم كصفحات ثابتة

StackOverflow https://stackoverflow.com/questions/695768

سؤال

لقد قمت ذات مرة بتشغيل نظام منتدى محلي الصنع لمجموعة صغيرة من لاعبي مباراة الموت عبر الإنترنت.تم إغلاق هذه المنتديات منذ فترة طويلة، وهي غير متصلة حاليًا.ما أريد القيام به هو إنشاء ملفات HTML ثابتة تحتوي على جميع البيانات الخاصة بالنظام بأكمله، من أجل الحصول على أرشيف عبر الإنترنت يمكن للمستخدمين السابقين البحث فيه.

لدي السيطرة على كافة البيانات الأصلية.وهذا يشمل:

  • الصور
  • مظهر
  • مواضيع المنتدى
  • قاعدة البيانات
  • مخطوطات PHP

في الأساس، أريد إخراج قاعدة البيانات من المعادلة، حتى لا أضطر إلى إهدار الموارد لإبقائها حية.(وأيضًا نظرًا لأن هذا كان حلاً محليًا للمنتدى، فأنا متأكد من أنه ليس محسّنًا للغاية)

هل هذا هدف ممكن التحقيق، أم يجب أن أبقي المنتديات كما هي، ولا أقلق بشأن النفقات العامة؟

إذا كان ذلك ممكنًا (وممكنًا عن بعد)، فهل يمكنني الحصول على بعض الاقتراحات حول كيفية المتابعة؟

هل كانت مفيدة؟

المحلول

يمكن لـ wget إنشاء مرآة HTML لموقع الويب.ابحث في المستندات عن استخدام --mirror.

نصائح أخرى

استخدم التخزين المؤقت للمخرجات لالتقاط كل مخرجاتك وكتابتها في ملف بدلاً من إخراجها إلى المتصفح.

قم بتحرير التعليمات البرمجية الخاصة بك بحيث يكون لديك هذا السطر في الأعلى (قبل أي إخراج HTML إلى المتصفح):

ob_start();

في نهاية البرنامج النصي، أضف هذا:

$output = ob_get_clean();
file_put_contents("<<name of this page>>.html", $output);

سيتعين عليك التوصل إلى نظام تسمية ما حتى لا تحصل على نسخ مكررة.

بعد ذلك، باستخدام التعبير العادي، استخدم Apache RewriteRules لإعادة توجيه جميع الطلبات إلى صفحة HTML الجديدة حتى لا تنقطع الروابط الخاصة بك.

للحصول على جميع الصفحات، يمكنك فقط النقر فوق كل واحدة منها واحدة تلو الأخرى إذا لم يكن لديك الكثير، ويمكنك كتابة جميع عناوين URL في مصفوفة يدويًا ثم تكرارها، أو يمكنك حتى الزحف إلى الموقع بنفسك، البحث عن جميع عناوين URL الموجودة على الصفحة وإضافتها إلى قائمة الانتظار أثناء التنقل.

ما قاله ceejayoz أو، يمكنك إضافة رؤوس التخزين المؤقت إلى تمهيد التطبيق الخاص بك، وذاكرة تخزين مؤقت لسنوات عديدة كما تعتقد أنك تريد ذلك.

يمكنك إجراء استدعاء للوظيفة المرفقة بعدد الساعات التي تريد تخزين الصفحة فيها مؤقتًا من جانب العميل، وتأكد من استدعاء هذه الوظيفة بعد session_start إذا كانت لديك، حيث أن session_start يصدر رؤوسًا تمنع التخزين المؤقت.

function client_side_cache($hours)

{
        //in the event a session start is used, I have to clean all the #$%# headers it sends to prevent caching
        header('Cache-Control: ',true);
        header("Pragma: ", true);
        header("Expires: ", true);

        //get the If-Modified-Since header in a unix time format
        $headers = getallheaders();
        if (isset($headers['If-Modified-Since']))
        {
            $modifiedSince = explode(';', $headers['If-Modified-Since']);
            $modifiedSince = strtotime($modifiedSince[0]);
        }
        else
        {
            $modifiedSince = 0;
        }

        //calculate the Last-Modified timestamp
        $current_time=time();
        $last_modified=($current_time)/($hours*3600);
        $last_modified=(int)$last_modified;
        $last_modified=$last_modified*$hours*3600;

    //check cache not expires
        if ($last_modified <= $modifiedSince)
        {
            header('HTTP/1.1 304 Not Modified');
            exit();
        }

        else //emit a new Last-Modified (either cache expired or page wasn'r cached
        {
            Header('Last-Modified: '.gmdate("D, d M Y H:i:s",$last_modified).' GMT ');
        }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top