الكشف التلقائي عن محرك المنتدى. الكشف التلقائي عن لوحة فهرس ملف محرك المنتدى php

لنبدأ فورًا بكود البرنامج النصي الرئيسي:

#! / usr / bin / perl

# which-forum.pl النصي
# (ج) 2010 الكسندر أ أليكسيف ، http: // website /

استخدام صارم

# سطور علق - للصرامة
# إذا كانت المهمة هي جمع إحصائيات المحرك ، فاتركها كما هي
# إذا قمت بعمل قائمة بالمنتديات - قم بإلغاء التعليق

بياناتي $؛
بيانات $. = $ _ بينما (<> ) ;

# تحقق من عدد الملفات التي تم تشغيلها بواسطة phpBB بدون رابط التذييل
طباعة "phpbb \ن"
إذا (البيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟: www \.)؟ phpbb \ .com \ /؟ "[^>] *> phpBB / iأو
# $ data = ~ /viewforum\.php\؟ [^""]*f=\d+/i أو
$ data = ~ / phpBB \ -SEO / i أو
بيانات $ = ~ /) ;
طباعة "ipb \ن"
إذا (البيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟: www \.)؟ invision (؟: board | power) \. com \ /؟ [^ "] *" [^>] *> [^<]*IP\.Board/i أو
بيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟: www \.)؟ invisionboard \ .com \ /؟ "[^>] *> Invision Power Board / iأو
بيانات $ = ~ /

/أناأو
بيانات $ = ~ /index\.php\؟[]""]*showforum=\d+/i) ;
طباعة "نشرة \ن"
إذا (البيانات $ = ~ / بدعم من:؟ [^<]+vBulletin[^<]+(?:Version)?/i أو
بيانات $ = ~ /) ;
طباعة "smf \ن"
إذا (البيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟: www \.)؟ simpleemachines \ .org \ /؟ "[^>] *> مدعوم من SMF / iأو
بيانات $ = ~ /index\.php\؟[]""]*board=\d+\.0/i) ;
طباعة "Punbb \ن"
إذا (البيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟ :( ؟: www \.)؟ punbb \ .org | punbb \ .informer \ .com) \ /؟ "[^>] *> PunBB / أنا) ؛ #أو
# $ data = ~ /viewforum\.php\؟[ ^^""]*id=\d+/i) ؛
طباعة "fluxbb \ن"
# if ($ data = ~ /viewtopic\.php\؟id=\d+/i أو
إذا (البيانات $ = ~ /] + href = "http: \ / \ / (؟: www \.) fluxbb \ .org \ /؟" [^>] *> FluxBB / i) ;
طباعة "exbb \ن"
إذا (البيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟: www \.)؟ exbb \ .org \ /؟ "[^>] *> ExBB / i) ؛ # أو
# $ data = ~ /forums\.php\؟[ ^^""]*forum=\d+/i)؛
طباعة "yabb \ن"
إذا (البيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟: www \.)؟ yabbforum \ .com \ /؟ "[^>] *> YaBB / iأو
$ data = ~ /YaBB\.pl\؟[ ^^""]*num=\d+/i)؛
طباعة "dleforum \ن"
إذا (البيانات $ = ~ / \ (مدعوم من منتدى DLE \)<\/title>/أناأو
بيانات $ = ~ /] + href = "[^"] + (؟: http: \ / \ / (؟: www \.)؟ dle \ -files \ .ru | act = copyright) [^ "] *"> منتدى DLE<\/a>/أنا) ;
طباعة "iconboard \ن"
إذا (البيانات $ = ~ /] + href = "[^"] * http: \ / \ / (؟: www \.)؟ ikonboard \ .com \ /؟ [^ "] *" [^>] *> Ikonboard / iأو
بيانات $ = ~ /\ن"
إذا (البيانات $ = ~ /\ن"
# if ($ data = ~ /forums\.php\؟fid=\d+/i أو
# $ data = ~ /topic\.php\؟fid=\d+/i أو
إذا (البيانات $ = ~ /] + href = "http: \ / \ / (؟: www \.)؟ flashbb \ .net \ /؟" [^>] *> FlashBB / i) ;
طباعة "ستوكسيت \ن"
# if ($ data = ~ /forum\.php\؟f=\d+/i أو
إذا (البيانات $ = ~ /] + href = "http: \ / \ / (؟: www \.)؟ stokesit \ .com \ .au \ /؟" [^>] *> [^ \ /] * Stokes IT / i) ;
طباعة "المنصة \ن"
# إذا ($ data = ~ /topic\.php\؟t=\d+/i أو
إذا (البيانات $ = ~ /] + href = [""]؟ http: \ / \ / (؟: www \.)؟ sopebox \ .com \ /؟ [""]؟ [^>] *> منصة / i) ;
طباعة "usebb \ن"
# if ($ data = ~ /forum\.php\؟id=\d+/i أو
إذا (البيانات $ = ~ /] + href = "http: \ / \ / (؟: www \.)؟ usebb \ .net \ /؟" [^>] *> UseBB / i) ;
طباعة "wrforum \ن"
# if ($ data = ~ /index\.php\؟fid=\d+/i أو
إذا (البيانات $ = ~ /] + href = "http: \ / \ / (؟: www \.)؟ wr \ -script \ .ru \ /؟" [^>] *> WR \ -Forum / i) ;
طباعة "yetanotherforumnet \ن"
إذا ($ data = ~ / Yet Another Forum \ .net / i أو
بيانات $ = ~ /default\.aspx\؟g=posts&t=\d+/i) ;

يمكن العثور على هذا وغيره من النصوص المذكورة في المنشور في هذا الأرشيف.

النصي الذي-forum.plيفحص كود صفحة html بحثًا عن وجود توقيعات محرك المنتدى فيها. استخدمنا أسلوبًا مشابهًا عند تعريف WordPress و Joomla ، ولكن هناك بعض الاختلافات. أولاً ، لا يقوم البرنامج النصي نفسه بتحميل رمز الصفحة ، ولكنه يقرأها من stdin أو من ملف تم تمريره كوسيطة. يتيح لنا ذلك تنزيل الصفحة مرة واحدة ، على سبيل المثال ، باستخدام wget ، ثم تشغيلها عبر عدة موزعات ، إذا كان لدينا أكثر من محلل واحد. ثانيًا ، في هذا النص ، يعد وجود التوقيع علامة 100٪ للمحرك. في المرة الأخيرة ، أعطى وجود التوقيع وزناً للمحرك المقابل و "فاز" بالمحرك ذي الوزن الأعلى. قررت أنه في هذه الحالة ، لن يؤدي مثل هذا النهج إلا إلى تعقيد الكود دون داعٍ.

لاختبار النص ، قمت ببعض البحث. قمت بتجميع قائمة من عدة آلاف من المنتديات وقمت بتشغيل كل منها من خلال البرنامج النصي الخاص بي ، وبالتالي تحديد النسبة المئوية لتنشيط البرنامج وشعبية المحركات المختلفة.

للحصول على قائمة المنتديات ، استخدمت محلل Google الخاص بي. محرك البحثإرسال طلبات مثل

الموقع: المنتدى. *. ru
الموقع: talk. *. ru
الموقع: board. *. ru
الموقع: smf. *. ru
الموقع: phpbb. *. ru
....

وما إلى ذلك وهلم جرا. كود كاملمولد الاستعلام سوف تجد في الملف gen-forumsearch-urls.pl. بالإضافة إلى منطقة .ru ، تم أيضًا استخدام .su .ua .kz و. by. كان من الصعب إجراء مثل هذه الدراسة في المرة الأخيرة ، نظرًا لأن مواقع WordPress و Joomla لا تحتوي على مثل هذه التوقيعات في عنوان URL. لا توفر الكتالوجات مثل cmsmagazine.ru/catalogue/ حجم عينة كافٍ. ما هو 600 موقع على دروبال؟

يجب أن أعترف أن نتائج التجربة خيبت أملي. من بين 12590 موقعًا تمت دراستها ، تم تحديد 7083 محركًا فقط بنجاح ، أي في 56٪ فقط من الحالات. ربما لم آخذ في الاعتبار بعض المحركات؟ هل تقف Bitrix في نصف المنتديات؟ أم هل يجب أن أمضي المزيد من الوقت في البحث عن التوقيعات؟ بشكل عام ، هناك حاجة إلى مزيد من البحث هنا.

من بين 56٪ من المحركات التي تم تحديدها بنجاح ، كان IPB (31٪) و phpBB (26.6٪) و vBulletin (26.5٪) الأكثر شهرة ، كما هو متوقع.

ويتبعهم عن كثب SMF (5.8٪) ومنتدى DLEForum (5.3٪). كان PunBB المفضل لدي في المركز السادس فقط (1.64٪). لا أنصح بالثقة بشدة في هذه الأرقام (يقولون أن كل منتدى ثالث في Runet يعمل على IPB) ، ولكن يمكن بالطبع استخلاص بعض الاستنتاجات.

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

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

يمكن أيضًا أن تجد البرامج النصية للبحث / تحديد المنتديات أكثر من واحد الاستخدام العملي. أول ما يتبادر إلى ذهني شخصيًا هو فرز المنتديات المحددة بواسطة TCI ووضع منشورات بها روابط إلى أحد مواقعهم في المائة الأولى. ومع ذلك ، فإن مئات روابط dofollow للمنتديات لم تؤثر على TIC بأي شكل من الأشكال (مرت تحديثان) ، لذلك من الأفضل عدم إضاعة الوقت هنا إلا إذا كنت مهتمًا بالانتقالات.

من الواضح أن الاستخدام المحدد للنصوص ليس هو الاستخدام الوحيد. أعتقد أنه يمكنك بسهولة معرفة كيف يمكنك استخدامها.

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

القوالب

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

المجالس المدعومة

تحتوي بعض اللوحات على أجهزة محددة مسبقًا عليها. عندما تكون لوحة مشتركة ، نقدم ملف makefile ( /boards/base/xxx/board.mk) والتي يمكنك تضمينها في makefile مشروعك. سيشمل هذا تلقائيًا جميع برامج تشغيل الأجهزة القياسية وملفات اللوحة. يمكن أيضًا العثور على ملفات لوحة إضافية محددة مسبقًا بتنسيق / المجالس / الإضافات.


ملف index.php هو الملف الرئيسي للمنتدى ويستخدم في جميع الإجراءات تقريبًا. يتكون عمله من الخطوات التالية:
1) الاتصال ملفات التكوين database.php و iboard.php.
2) إنشاء اتصال بنظام DBMS والوصول إلى قاعدة البيانات.
3) قراءة المعلومات من ملفات تعريف الارتباط للمستخدمأو من المعلمات التي تم تمريرها إلى البرنامج النصي ، واستخراج معلومات حول هذا المستخدم من قاعدة البيانات والتحقق من صحتها.
4) في حالة التحقق غير الناجح (أو نقص المعلومات حول المستخدم) ، يتم استرداد بيانات ملف تعريف المستخدم الضيف كبيانات مستخدم ( رقم التسجيل - 1).
5) ربط ملفات النمط ولغة الواجهة ، تعريف المستخدمفي إعدادات ملف التعريف الخاص بك.
6) إذا كانت المعلمة t موجودة في معلمات استدعاء البرنامج النصي ، فسيتم استرداد البيانات المتعلقة بالموضوع والمنتدى المحددين من قاعدة البيانات ، حيث هذا الموضوعتقع.
7) إذا كان المعامل f موجودًا في معلمات استدعاء النص البرمجي ، فسيتم استرداد البيانات المتعلقة بالمنتدى من قاعدة البيانات.
8) في حالة وجود معلمات t أو f ، يتم إجراء فحص لمعرفة ما إذا كان المستخدم لديه حقوق كافية لعرض المنتدى المقابل.
9) يتم توصيل الوحدة النمطية المحددة في المعلمة m. إذا كانت المعلمة m غير موجودة ، فسيتم تحديد نوع الوحدة النمطية اعتمادًا على نوع القسم الذي يحتوي ملف هذا الفعل. إذا لم يتم تحديد نوع القسم ، فسيتم إجراء فحص لتحديد ما يجب عرضه على هيئة الصفحة الرئيسية. في حالة تحديد أحد الأقسام كصفحة رئيسية ، فسيتم توصيل الوحدة المسؤولة عن عرض القسم من النوع المقابل ، وإلا - الوحدة النمطية main.php. يتم أيضًا تضمين ملف نمط ، له نفس اسم المكون الإضافي ، ولكنه موجود في دليل فرعي من دليل الأنماط المقابل للنمط المحدد في إعدادات ملف تعريف المستخدم.
10) تم فحص المعلمة a. إذا لم يتم تعيينه بشكل صريح ، فسيتم إعلانه مساويًا للعرض. علاوة على ذلك ، إذا تم تحديد قسم معين وكانت المعلمة مساوية للعرض ، فسيتم استبدالها بـ<имя_раздела>_منظر.
11) اعتمادًا على الإجراء المطلوب (يتم تحديده في معلمة استدعاء البرنامج النصي أ) ، يتم توصيل إما ملف tmplate1.php (إذا كان الإجراء لا يحتوي على بادئة do_) أو ملف tmplate2.php (خلاف ذلك). بعد ذلك ، يتم استدعاء جميع الإجراءات المدرجة في القالب المقابل ، وبدلاً من إجراء main_action ، سيتم استدعاء الإجراء المحدد في المعلمة بالفعل.
12) يحتوي سجل المنتدى على معلومات حول الإجراء المنفذ والمعرف وعنوان IP الخاص بالمستخدم الذي قام بهذا الإجراء.
يوجد أيضًا في ملف index.php وظيفة لمعالجة الأخطاء الفادحة ، وهي مصممة لعرض رسالة خطأ ، بالإضافة إلى إصلاح نص الخطأ في ملف error.log.

تحميل...
قمة