كيف يمكنني إنشاء موقع بلغة php وجعله يقوم بإنشاء نسخة ثابتة؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

بالنسبة لمشروع معين لدي، لا يُسمح بأي تعليمات برمجية من جانب الخادم.كيف يمكنني إنشاء موقع ويب بلغة php (مع تضمينات وشروط وما إلى ذلك) ثم تحويل ذلك إلى موقع html ثابت يمكنني تقديمه للعميل؟

تحديث:شكرا لكل من اقترح wget.هذا ما استخدمته.كان يجب أن أحدد أنني أستخدم جهاز كمبيوتر، لذلك حصلت على إصدار Windows من هنا: http://gnuwin32.sourceforge.net/packages/wget.htm.

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

المحلول

إذا كان لديك نظام Linux متاحًا لاستخدامه wget:

wget -k -K  -E -r -l 10 -p -N -F -nH http://website.com/

خيارات

  • -ك :تحويل الروابط إلى النسبية
  • -ك :احتفظ بالإصدارات الأصلية من الملفات دون التحويلات التي أجراها wget
  • -ه :إعادة تسمية ملفات html إلى .html (إذا لم يكن لها امتداد htm(l) بالفعل)
  • -ص :متكرر...بالطبع نريد عمل نسخة متكررة
  • -ل 10 :الحد الأقصى لمستوى العودية.إذا كان لديك موقع ويب كبير جدًا، فقد تحتاج إلى وضع رقم أعلى، ولكن 10 مستويات ستكون كافية.
  • -ص :تنزيل كافة الملفات الضرورية لكل صفحة (css، js، الصور)
  • -ن :قم بتشغيل ختم الوقت.
  • -F :عند قراءة الإدخال من ملف، قم بفرض معاملته كملف HTML.
  • -نه :افتراضيًا، يقوم wget بوضع الملفات في دليل يحمل اسم مضيف الموقع.سيؤدي هذا إلى تعطيل إنشاء أدلة أسماء المضيفين ووضع كل شيء في الدليل الحالي.

مصدر: مدونة جان باسكال هود

نصائح أخرى

لقد قمت بذلك في الماضي بإضافة:

ob_start();

في أعلى الصفحات ثم في التذييل:

$page_html = ob_get_contents();
ob_end_clean();
file_put_contents($path_where_to_save_files . $_SERVER['PHP_SELF'], $page_html);

قد ترغب في تحويل امتدادات .php إلى .html قبل دمج HTML في الملفات.إذا كنت بحاجة إلى إنشاء صفحات متعددة تحتوي على متغيرات، فإن أحد الخيارات السهلة للغاية هو إلحاق اسم الملف بـ md5sum لجميع متغيرات GET، وتحتاج فقط إلى تغييرها في HTML أيضًا.لذلك يمكنك تحويل:

somepage.php?var1=hello&var2=hullo

ل

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

قبيح ولكنه يعمل.

في بعض الأحيان يمكنك استخدام PHP لإنشاء جافا سكريبت لمحاكاة بعض الميزات، ولكن لا يمكن تشغيل ذلك تلقائيًا بسهولة.

أنشئ موقعك، ثم استخدم أداة النسخ المتطابق مثل wget أو lwp-mirror للاستيلاء على نسخة ثابتة

قم بإنشاء الموقع كالمعتاد، ثم استخدم برنامج العنكبوت لإنشاء نسخة HTML.

HTTrack هو البرنامج الذي استخدمته من قبل.

إحدى الطرق للقيام بذلك هي إنشاء الموقع بلغة PHP كالمعتاد، والحصول على برنامج نصي يلتقط صفحات الويب بالفعل (من خلال HTTP - يمكنك استخدام wget أو كتابة برنامج نصي php آخر يستخدم file() فقط مع عناوين URL) وحفظها في المجلد مواقع الويب العامة عند "الانتهاء".ثم يمكنك فقط تشغيل البرنامج النصي مرة أخرى عندما تقرر تغيير الصفحات مرة أخرى.تعد هذه الطريقة مفيدة جدًا عندما يكون لديك قاعدة بيانات تتغير ببطء والكثير من حركة المرور، حيث يمكنك التخلص من جميع استعلامات SQL على الموقع المباشر.

إذا كنت تستخدم modx، فهو يحتوي على وظيفة مدمجة لتصدير الملفات الثابتة.

إذا كان لديك عدد من الصفحات، مع جميع أنواع متغيرات الطلب وما إلى ذلك، فمن المحتمل أن تكون إحدى أدوات العنكبوت التي ذكرها المعلقون الآخرون (wget، lwp-mirror، إلخ) هي الحل الأسهل والأقوى.

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

  1. يمكنك استخدام PHP في سطر الأوامر لإخراجه مباشرة إلى ملف.

    php myFile.php > myFile.html

    قد يكون استخدام هذه الطريقة مؤلمًا (على الرغم من أنه يمكنك وضعها كلها في برنامج نصي Shell)، ولا تسمح لك بتمرير المتغيرات بنفس الطريقة (على سبيل المثال: php myFile.php?abc=1 لن ينجح).

  2. يمكنك استخدام ملف PHP آخر كبرنامج نصي "إنشاء" يحتوي على قائمة بجميع عناوين URL التي تريدها ثم يحصل عليها عبر file_get_contents() أو file() ويكتب لهم إلى ملف محلي.باستخدام هذه الطريقة، يمكنك أيضًا التحقق مما إذا كان الملف قد تغير (md5_file() يجب أن تعمل من أجل ذلك)، لذلك ستعرف ما الذي يجب أن تقدمه لعميلك، إذا كان يريد التحديثات فقط.

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

بدلاً من wget، يمكنك استخدام (Win|Web)HTTrack (موقع إلكتروني) للاستيلاء على الصفحة الثابتة.يقوم HTTrack أيضًا بتصحيح الروابط إلى الملفات والمستندات لتتناسب مع الإخراج الثابت.

أفعل ذلك على موقع الويب الخاص بي لصفحات معينة مضمونة عدم التغيير - أقوم ببساطة بتشغيل برنامج نصي شل يمكن غليه (تحذير:كود باش الزائف):

find site_folder -name \*.static.php -print -exec Staticize {} \;

مع كون Staticize:

# This replaces .static.php with .html
TARGET_NAME="`dirname "$1"`/"`basename "$1" .static.php`".html
php "$1" > "$TARGET_NAME"

ربما تكون wget هي الطريقة الأكثر اكتمالا.إذا لم يكن لديك إمكانية الوصول إلى ذلك، وكان لديك تخطيط قائم على القالب، فقد ترغب في النظر في استخدام Savant 3.أوصي بـ Savant 3 بشدة مقارنة بأنظمة القوالب الأخرى مثل Smarty.

Savant خفيف الوزن جدًا ويستخدم PHP كلغة القالب، وليس بعض اللغات الفرعية الخاصة.الأمر الذي تريد البحث عنه هو fetch()، والذي سيقوم "بتجميع" القالب الخاص بك ووضعه في متغير يمكنك إخراجه.

http://www.phpsavant.com/

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