[php] التعامل مع الدوال المعطلة

مدرج تحت قسم: دروس
1 سبتمبر 2007

كثيراً ما تكتب سكربت وتجد انه لا يعمل عند بعض الناس بسبب انك استخدمت دالة معطلة على السيرفر ويكون هناك البديل لهذه الدالة ولكن قد تجد هذه الدالة معطلة في سيرفرات البعض الآخر (انا أفترض فقط لما أرى مثل هذا ).

الجميع يعلم ان تعطيل الدوال يتم كالآتي:

نقوم بفتح الملف php.ini ثم نقوم بالبحث عن disable_functions
ونقوم بوضع الدوال التي نريد تعطيلها ويتم الفصل بين الدوال التي نريد تعطيلها بفاصلة، مثال.

disable_functions = addslashes,stripslashes

ثم نقوم بعمل إعادة تشغيل للسيرفر.

*هذه أمثلة فقط فلا ينصح ابداً بتعطيل هذه الدوال

طيب الأن وقد قمنا بتعطيل بعض الدوال.

هل لنا أن نعرض تلك الدوال مثل ملف معلومات لبعض الأشياء الموجودة على السيرفر ومن ضمنها الدوال المعطلة؟
الإجابة نعم بكل تأكيد فالPHP مرنة جداً في كل شئ.

فلو راجعنا المانوال لوجدنا دالة بإسم ini_get من إسمها تجد انه ستقوم بالوظيفة التي نريدها.

نأتى الأن لشرح إستخدام الدالة.

ini_get(الإعداد الموجود بملف php.ini)

وهى تقوم بإرجاع قيمة الإعداد بدون إسمه على هيئة string وبمثال بسيط سنقوم بعرض جميع الدوال المعطلة.

echo ini_get('disable_functions');

هذا سيقوم بعرض الدوال المعطلة كما كتبت وفصلت بفاصلة في ملف php.ini واذا لا توجد دوال معطلة سيرجع قيمة فارغة فيمكنك التحقق من ان القيمة غير فارغة قبل عرض الدوال. او يمكن عرض جميع الدوال عن طريق.

// وضع الدوال المعطلة في متغير
$disabled_functions = ini_get('disable_functions');
// وضع الدوال في مصفوفة
$disabled_functions_array = explode(',', $disabled_functions);
foreach($disabled_functions_array AS $func)
{
echo $func . "
";
}

الآن كيف يمكننا التحقق من ان دالتنا غير معطلة؟ كمثال الدالة copy فكما نعلم معظم السيرفرات تقوم بتعطيل هذه الدالة وأقصد السيرفرات العربية.

نقوم بكل بساطة بإستخدام الدالة function_exists فهى ليس كما يتصور البعض دالة للتحقق من ان هناك دالة معينة موجودة في إصدارة PHP ولكنها للتحقق من ان الدالة تم تعريفها واذا تم تعطيل احد الدوال فتلقائياً لا تعرف.

ماذا تعلمنا في هذا الدرس الصغير؟

  1. تعطيل الدوال
  2. عرض الدوال المعطلة
  3. التحقق من ان هنا دالة معينة غير معرفة

للكاتب Developer

  • Share/Bookmark

التعقيبات

  1. غير معروف

التعليقات (6) على ”[php] التعامل مع الدوال المعطلة“

  1. مقال جميل جدا اخي ديفو ،

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

    لكن لا انكر فائدتها من الناحية الامنية

    لي ملاحظة : لو ذكرت بعض انواع الدوال التي دائما تكون معطلة مثل dl, exec, shell_exec, system من اجل تدعيم المقال ،

    على فكرة قرأت ان set_time_limit لا تأثير لها عندما safe mode في وضع ON ، كأنها معطلة :)

  2. ماشاء الله مقال راااائع جداً ومفيد ,, جزاك الله كل خير أخي الكريم .

    تحياتي
    فراس

  3. مقال قمة في الروعة…
    الله يعطيك العافية اخي…
    و جزاك الله كل خير..
    سلام.

  4. بارك الله فيكم جميعاً :) …

    @ بال: لقد قمت الأن بتدعيم الموضوع بذكرك بعض من الدوال المعطلة .. ,وبالنسبة للدالة set_time_limit فهى كبعض الدوال التى تتأثر بالسيف موود ولكن الدوال التى يتم منعها بالطريقة المذكورة فى الأعلى لا تتأثر بالسف موود سواء مفتوح او مغلق تكون هى معطلة ..

  5. شمري مطنوخ

    ماذا لوكانت معطله وهي معطله في اغلب السيرفرات ini_get() هل يوجد بديل

  6. طيب اخوان ماكو بديل للدالة getimagesize ???????????
    لانها تعمل لود قوي على السيرفر واني محتاجهة بشكل
    يعني محتاج دالة تكولي ابعاد الصورة
    تحياتي

أضف تعليقك




يمكنك استخدام الوسوم التالية في التعليق: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


* حقول مطلوبة