![اقتباس](images/misc/quote_icon.png)
المشاركة الأصلية كتبت بواسطة جريح الحب
ماجاوبتني على سؤالي ولكن سأجاوبك حتى تتضح الصوره عن الفرق بين الكوديين
الكوود الأول كان بالشكل التالي:
كود PHP:
eval('$navbar = "' . fetch_template('navbar') . '";');
بعد استبدال دالة eval بدالة print يصبح
كود PHP:
print('$navbar = "' . fetch_template('navbar') . '";');
طيب نجي للتسلسل في التنفيذ داخل الـ php لهذا السطر الذي عدلناه.
الأول يتم تنفيذ الداله fetch_template التي تستدعي محتوى القالب المسمى navbar والذي يحتوي على القالب الذي يحتوي على رموز html ومتغيرات php .
فلنفرض أن القالب يحتوي على مايلي:
كود HTML:
<div>$header</div>
عند رجوع دالة fetch_template بالقالب السابق سيصبح السطر الذي بالأعلى كالتالي:
كود PHP:
print('$navbar = "<div>$header</div>";');
لذلك ستطبع دالة print السطر التالي:
كود HTML:
$navbar = "<div>$header</div>";
هذا السطر الذي تمت طباعته من دالة print لو قمنا بإدخاله داخل دالة eval سيتم تنفيذه كسطر من أسطر الـ PHP .
وسيتم إعطاء المتغير $navbar
القيمه التي ستحصل من ناتج الطرف الأيمن وهو:
"<div>$header</div>"
لأننا حوطنا النص بعلامة التنصيص " فسوف يتم إحتساب قيمة المتغير $header أولا وبعدها يتم إضافته داخل علامات الdiv وبعدها ستؤول النتيجه الى متغير navbar أما لو كانت علامة التنصيص المفرد ' فلن يتم إحتساب متغير $header وهذه نقطه يجب أن يعرفها أي شخص مبرمج php .
فإذا قمنا بوضع تعليمة php داخل القالب السابق بدلا من $header فسوف يتم إحتسابه كنص مكتوووووووب.
على سبيل المثال القالب التالي:
كود HTML:
<div><?php system('uname');?></div>
هذا بالنسبه للكود الأول.
أما الكوود الثاني الذي يستخدم في أنظمة الـ hooks في نسخ 3.5 فهو كالتالي:
كود PHP:
($hook = vBulletinHook::fetch_hook('forumhome_start')) ? eval($hook) : false;
سنقوم بتغيير دالة eval الى دالة print وسيصبح السطر بالشكل التالي:
كود PHP:
($hook = vBulletinHook::fetch_hook('forumhome_start')) ? print($hook) : false;
أولا وحسب التسلسل البرمجي لهذا السطر فسيتم إستدعاء الهووك المسمى forumhome_start من دالة fetch_hook الموجوده في الكلاس المسمى vBulletinHook .
ناتج هذا الهوووك من قيم سيتم تخزينه في متغير $hook .
لنفرض أن قيمة هذا الهووك كانت تحتوي على مايلي:
كود PHP:
system('uname');
بعد أن يتم تخزين القيمه في متغير $hook سيتم النظر في علامة الاستفهام ( ؟ ) وهذه تعني أننا بداخل شرط برمجي فإذا كانت قيمة الشرط الموجوده يسار علامة الاستفهام موجبه فسوف يتم تنفيذ:
أما لو كانت قيمة الشرط سالبه فسوف يتم تنفيذ
قيمة الشرط ستكون موجبه طبعاً لأننا حملنا الهووك بداخل متغير $hook وأصبح متغير $hook يحمل قيمه .
لذلك سيتم بكل بساطه تنفيذ :
والذي بدوره يقوم بطبع قيمة متغير $hook والتي ستكون طبعاً كما ذكرنا سابقاً:
كود PHP:
system('uname');
لو تم إدخال هذه القيمه المطبوعه داخل دالة eval فماذا سيحدث ![Smilie](images/smilies/smile.gif)
أنت تعلم ماذا سيحدث لذلك أحببت التوضيح للفرق الكبير بين السطرين.
الاخ الرومانتك
انا هنا بسوالف ولست هناك بالـ mbc ![Smilie](images/smilies/smile.gif)
والله ياطيب انا عاصرت منتديات الـ vb من النسخه الأولى ورأيت كيف تطورت وأرى أن أقوى نسخ هي نسخ 3.0.5 ومافوق .
وأما الفلتره فلا أعتقد أنهم سيعملوها لأنها متعبه لهم وأنا أرى أن الحل الأنسب هو الإزاله من جذورها لهذا النظام هوووك وبس ![Smilie](images/smilies/smile.gif)
اما عن سؤالك عن برمجيات فأنا متوقف بالحقيقه بسبب متابعة الأسهم ![Smilie](images/smilies/smile.gif)
الاخ AbO SalAh ElDiN
أنصح باخر نسخه نزلت من اصدار 3.0 وهي 3.0.14 والله يوفقكم لما يحب ويرضى.
موفقين