XF 2.3 كود PHP لفحص توافقية ملفات الإضافات مع إصدارات PHP الحديثة في XenForo الدرس (5)

الدرس (5): سكربت PHP لفحص توافقية ملفات الإضافات مع إصدارات PHP الحديثة في XenForo

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

أهلاً بكم أخواني وأعضائنا الكرام في شبكة كود نت.

مستمرون معكم في سلسلة الفحوصات والسكربتات السريعة لإدارة وتطوير منتديات XenForo، ونصل اليوم إلى الدرس الخامس (5) والمخصص لفحص توافقية ملفات PHP الخاصة بالإضافات عند ترقية السيرفر إلى إصدارات PHP حديثة (مثل PHP 8.1 أو 8.2 أو 8.3).

عند ترقية إصدار PHP على السيرفر، قد تتوقف بعض الإضافات القديمة عن العمل بسبب استخدام دوال أو بناء برمجية ملغاة (Deprecated) أو غير مدعومة، مما يسبب أخطاء غير متوقعة في المنتدى.

هذا السكربت البسيط يقوم بالمرور الآلي على جميع ملفات PHP الخاصة بإضافة معينة داخل مجلد src/addons/ ويفحصها قراءةً لاكتشاف أي استخدام لـ دوال شائعة تم إلغاؤها أو إيقافها في إصدارات PHP الحديثة.
IMG_9842.webp
الكود البرمجي:

PHP:
<?php

// تحديد مسار مجلد الإضافات المسستهدفة بالفحص
$addonPath = __DIR__ . '/src/addons/codeNET/DownloadGate';

if (!is_dir($addonPath))
{
    die('خطأ: المسار المحدد غير موجود. يرجى التأكد من مسار الإضافة.');
}

// الدوال والأنماط التي تم إلغاؤها أو تغييرها في إصدارات PHP 8.x
$deprecatedPatterns = [
    'create_function(' => 'استخدام create_function() ملغاة تماماً في PHP 8',
    'each(' => 'استخدام each() ملغاة في PHP 8',
    'utf8_encode(' => 'استخدام utf8_encode() ملغاة في PHP 8.2',
    'utf8_decode(' => 'استخدام utf8_decode() ملغاة في PHP 8.2',
    'mb_convert_encoding(' => 'تأكد من ترتيب البرامترات في mb_convert_encoding'
];

$directory = new RecursiveDirectoryIterator($addonPath);
$iterator = new RecursiveIteratorIterator($directory);
$phpFiles = new RegexIterator($iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);

echo '<h2>فحص توافقية الملفات مع إصدارات PHP الحديثة (PHP Compatibility Check)</h2>';
echo '<table border="1" cellpadding="8" cellspacing="0" style="border-collapse:collapse; width:100%;">';
echo '<tr style="background:#f2f2f2;"><th>اسم الملف</th><th>رقم السطر</th><th>الاحتمالية / التنبيه</th></tr>';

$foundIssues = 0;

foreach ($phpFiles as $file)
{
    $filePath = $file[0];
    $lines = file($filePath);

    foreach ($lines as $lineNumber => $lineContent)
    {
        foreach ($deprecatedPatterns as $pattern => $warning)
        {
            if (strpos($lineContent, $pattern) !== false)
            {
                echo '<tr>';
                echo '<td>' . htmlspecialchars(basename($filePath)) . '</td>';
                echo '<td style="text-align:center;">' . ($lineNumber + 1) . '</td>';
                echo '<td style="color:red;">' . htmlspecialchars($warning) . '</td>';
                echo '</tr>';
                $foundIssues++;
            }
        }
    }
}

if ($foundIssues === 0)
{
    echo '<tr><td colspan="3" style="color:green; text-align:center;"><strong>ممتاز! لم يتم العثور على أي دوال ملغاة شائعة في ملفات الإضافة.</strong></td></tr>';
}

echo '</table>';

كيف يعمل السكربت؟

* مسح المجلدات شجرياً (Recursive Search): يمر عبر كافة المجلدات الفرعية داخل الإضافة المحددة للوصول إلى أي ملف بصيغة .php.
* مطابقة الأنماط (Pattern Matching): يقرأ سطرًا بسطر ليبحث عن أي دالة أصبحت غير مدعومة أو تم إيقافها في إصدارات PHP الحديثة.
* تحديد الموقع بالضبط: يعرض اسم الملف ورقم السطر المتأثر مباشرة لتسهيل التعديل والتحديث.

طريقة الاستخدام:

1. قم بإنشاء ملف باسم check_php_compat.php في الجذر الرئيسي للمنتدى.
2. عدّل السطر الرابع لمسار الإضافة التي تود فحصها (مثال: src/addons/codeNET/DownloadGate).
3. افتح الرابط عبر المتصفح: https://your-domain.com/check_php_compat.php
4. في حال وجود تنبيهات، يمكنك مراجعة الملفات المذكورة وتحديث الصياغة البرمجية لضمان عمل المنتدى بكفاءة مع PHP 8+.
5. قم بحذف الملف بعد الانتهاء للحفاظ على أمان السيرفر.

أتمنى أن يكون هذا الدرس مفيداً لمطوري وممتلكي المنتديات. إذا كانت لديكم أي استفسارات، يسعدني مشاركتك في الردود!
 
عودة
أعلى أسفل