• php
  • 1979
  • 20/3/2008
  • بسم الله الرحمن الرحيم الحمدلله ، والصلاة والسلام على رسول الله ، محمد بن عبدالله ، وبعد ؛ سوف أشرح القليل عن دالة get_meta_tags ثم نتطرق إلى مثال بسيط بإذن الله تعالى .. في البداية هذه الدالة ظهرت في PHP 3 منذ الإصدارة 3.0.4 وبقيت في PHP 4 ولا تزال في PHP 5 .. وظيفة هذه الدالة هي إعادة مصفوفة تحتوي على خصائص وسوم meta من ملف معين .. صيغة الدالة العامة هي:
    array get_meta_tags ( string filename [, bool use_include_path] )
    حيث filename هو عنوان الملف الذي تريد جلب معلومات وسوم meta فيه .. وفي الوسوم التي توجد في الهيدر لتعريف بعض الأمور الخاصة بالصفحة .. ويمكن ان يكون الملف محلي ( ضمن نطاق السيرفر الذي تعمل عليه ) .. أو صفحة انترنت خارج نطاق السيرفر ...
    سوف يتم فتح هذا الملف وطباعة محتوياته سطراً سطراً من اسطر وسوم meta انتهاءً بوسم الإغلاق للهيد ..
    </head>
    اما الباراميتر الثاني use_include_path والذي هو من نوع منطقي Boolean كما هو واضح في الصيغة العامة للدالة .. فإنه لو كان TRUE فسوف يتم تضمين الملف من مسار مجلد التضمين الأساسي في البي إتش بي .. للمزيد يمكنك الاطلاع على اعدادات البي اتش بي بخصوص هذا الاعداد:
    http://www.php.net/manual/en/ini.core.php#ini.include-path لنفرض أنه لدينا وسوم ميتا التالية:
    <meta name="author" content="name">
    <meta name="keywords" content="php documentation">
    <meta name="DESCRIPTION" content="a php manual">
    <meta name="geo.position" content="49.33;-86.59">
    </head> <!-- هنا تتوقف عملية سحب البيانات -->
    قيمة الخاصية name في وسم الميتا سيتم اخذها على اساس انها مفتاح للعنصر في تلك المصفوفة .. فكل عنصر يتكون من المفتاح ( اسم الميتا تاج ) .. وقيمة هذا العنصر هي قيمة الخاصبة content للميتا تاج ..
    إذا كان هناك أكثر من وسم ميتا يتضمن نفس قيمة الخاصية name فسيتم إعادة قيم الوسم الأخير فقط ..! ملاحظة مهمة: جميع الرموز الخاصة في قيمة اسم الميتا تاج يتم تحويلها إلى "_" .. اما باقي الاحرف فيتم تحويلها الى lowercase ( حروف صغيرة ) .. لنأخذ مثال بسيط يقوم بطباعة محتويات وسوم الميتا في المثال السابق بعد افتراض تخزين الملف السابق باسم test.html في نفس مسار الملف الذي سوف تنشئه الان :
    <?php $meta = get_meta_tags('test.html'); // تنفيذ الدالة بحيث يصبح المتغير عبارة عن مصفوفة تحتوي على القيم التي ذكرناها سابقاً // لاحظ هنا كيف اصبحت جميعها حروف صغيرة واستبدلت "." بـ "_"
    echo $tags['author']; // name
    echo $tags['keywords']; // php documentation
    echo $tags['description']; // a php manual
    echo $tags['geo_position']; // 49.33;-86.59
    ?>
    الآن دعونا نفكر أكثر .. لو أردنا مثلاً تفحص موقع معين لمعرفة هل هو يستخدم vBulletin مثلاً والحصول على إصدار نسخته .. ماذا سنفعل عندها ؟؟
    تأمل في الكود التالي قليلاً :
    <?php $url = "http://www.vbulletin.com/forum"; $meta = get_meta_tags($url);
    while (list($key, $value) = each($meta)) {
    if ($key == "generator" && preg_match("/^vBulletin/si", trim($value))) {
    echo '<span dir="rtl">هذا الموقع يعتمد على برنامج vBulletin الإصدار'. trim(preg_replace("/vbulletin/si", "", $value)) .'</span>';
    } else {
    echo '<span dir="rtl">لا يستخدم vBulletin.</span>';
    }
    } ?>
    لو فكرت قليلاً لوجدتنا حددنا عنوان الموقع وهو http://www.vbulletin.com/forum في البداية في متغير قمنا بتسميته url$ ...
    ثم جلبنا إلى المتغير meta$ مصفوفة بمعلومات ميتا تاج في تلك الصفحة ...
    بعدها بدأنا بتفريغ محتويات تلك المصفوفة بواسطة حلقة while مستخدمين دالة list التي قمت بشرح كيفية استخدامها في 09-01-2006 في الرابط التالي:
    http://www.swalif.net/softs/showthread.php?t=144215 وتأكدنا من ان المفتاح key وهو كما ذكرت سابقاً نفس خاصية name في الميتا نفسها .. لذلك فسنضعه نفسه مع جعل الاحرف صغيرة واستبدال الرموز الخاصة بـ "_" .. تأكدنا انه generator حيث هناك يقوم منتدى vBulletin بطباعة النسخة والاصدار .. وتأكدنا ان المتغير يحتوي على vBulletin في بدايته ثم طبعنا الاصدار بحذف كلمة vBulletin من خاصية content التي جعلناها هنا ( value$ ) وطبعنا رقم الاصدار بعد حذف المسافات البيضاء قبله وبعده .. وان لم يكن vBulletin بعدها سيطبع انه ليس vBulletin ... أعتقد أن هذا المثال واضح .. ان شاء الله تعالى .. أما ان كنت تريد الحصول على وسم اخر ليس meta فقد وجدت في المانيوال شخصاً قد كتب هذا الكود وبالطبع يمكن تعديله او استخدام اكودا اخرى تفي بالغرض حيث أنه فقط للمساعدة:
    <?php $page = "http://www.mysite.com/apage.php"; // tags
    $start = '<atag>';
    $end = '<\/atag>'; // open the file
    $fp = fopen( $page, 'r' ); $cont = ""; // read the contents
    while( !feof( $fp ) ) {
    $buf = trim( fgets( $fp, 4096 ) );
    $cont .= $buf;
    }

    // get tag contents
    preg_match( "/$start(.*)$end/s", $cont, $match ); // tag contents
    $contents = $match[ 1 ]; ?>
    أتمنى أن يكون أي شخص قد استفاد حتى لو القليل من هذا الدرس .. وانتظروني مرة اخرى في دروس اخرى ان شاء الله تعالى الكاتب : sBForum
    كن أول من يقيم الموضوع
    12345