السلام عليكم ورحمه الله وبركاته
هذا الموضوع سيضم الكثير من الاشياء المفيده الخاصه بالبرمجه بلغه ال PHP والـ MYSQL
ملحوظه
فى الامثله التى سأقوم بشرحها سأقوم بأستخدام بعض الدوال الجديده مثل
($_GET/$_POST/$_COOKIE/$_SERVER)
وذلك لاننى اعتقد انه اذا لم يكن جميعكم فغالبيتكم يوجد لديه الأصداره 4.1.0 من الــ PHP
واذا لم تكن لديكم هذه الأصاره يمكنكم استخدام الدوال القديمه
كود PHP:
($HTTP_GET_VARS/$HTTP_POST_VARS/$HTTP_COOKIE_VARS/$HTTP_SERVER_VARS)
ولكن ينبغي عليكم الترقيه وذلك لاكتشاف عده ثغرات بالنسخ القديمه منها على سبيل المثال لا الحصر file-upload vulnerability
register_globals
فى البدايه لمن لا يعلم فائده ال register_globals فهو خيار فى ملف اعدادات الــ php واسم ملف الاعدادات php.ini
وهذا الخيار اذا كان مفعل اى
فانه يمكنك من الوصول لمعظم متغيرات الاسكريبت الخاص بك بطريقه سحريه عن طريق مناداه المتغير بأسمه فقط
وينتج هذا لانه عند تفعيل هذا الخيار يتم تحويل المتغيرات العاديه الى متغيرات عامه (global variables)
وللأسف هذه الطريقه يتم استخدامها فى الكثير والكثير من البرامج والأمثله ..
وقد لاحظ فريق المطورين الخاص بالـ PHP ذلك واتضح لهم ان خيار الــ register_globals كانت فكره سيئه للغايه ,
وتم مناقشه هذا الامر هنا
http://www.php.net/manual/en/securit...terglobals.php
ونصحو بغلقها تماما
كود:
register_globals=OFF
Note that register_globals is going to be deprecated (i.e., turned off by default) in the next version of PHP, because it often leads to security bugs.
...
You should do your best to write your scripts so that they do not require register_globals to be on
وذلك لانها تتسبب فى وجود الكثير من الثغرات الامنيه ..
وفى الحقيقه منذ بدايه عصر الاصداره رقم 4.2.0 تم اغلاق الــ register_globals بصوره افتراضيه الان ,
ولذلك يجب مراعاه كتابه كود برمجى يعمل على الأنظمه كلها سواء كانت الــ
او
كود:
register_globals=OFF
ولذلك وجب علينا استخدام بعض الدوال المختصه بأستقبال المتغيرات مثلا لأستقبال متغير يسمى
الطريقه القديمه كانت بواسطه كتابه اسمه فقط
هذه فى حاله ان الــ
والطريقه الثانيه والمثلي
كود PHP:
Echo $_GET['VAR'];
//او
Echo $_POST['VAR'];
هذا فى حاله استقبال متغيرات عن طريق الــ Get او الـــ POST
ولطباعه نوع المتصفح نستخدم
كود PHP:
eCHO $_SERVER['HTTP_USER_AGENT'];
بدلا من
كود PHP:
ECHO $HTTP_USER_AGENT;
وهناك العديد من الدوال التى يجب ان نلم بها وهى
$_GET, $_POST, $_COOKIE, $_SERVER
ويمكنكم قراءه المزيد هنا
http://www.php.net/manual/en/languag...predefined.php
او هنا
http://www.php.net/manual/en/reserved.variables.php
magic_quotes , addslashes() , stripslashes() ...
magic_quotes_gpc هو احد الخيارات الموجوده فى ملف اعدادات الــ PHP وعندما يكون هذا الخيار مفعلا اى
كود:
magic_quotes_gpc =ON
فأنها تضيف شرطات مائله (\) الى جميع المتغيرات
GET/POST/COOKIE
لذلك لا يوجد داعى لاستخدام addslashes() اذا كان هذا الخيار مفعلا
لذلك فعند اجراء الاستعلامات لاننا بهذا سنعقد المسأله , ولتوضيح ما ارمي اليه , فاذا كان هذا الخيار مفعلا ستصبح كلمه I'M = I\\'M
وايضا اذا استخدمنا داله addslashes() فى حاله كان الخيار غير مفعل ستصبح كلمه I'M = I\\'M
لاحظنا الان ان الاثنين يقومون بنفس العمل
فما بالك اذا قمنا بأستخدام الداله addslashes() وكان خيار
كود:
magic_quotes_gpc =ON
ستصبح كلمه I'M = I\\\\'M
ارأيتم التعقيد ؟ ماذا لو اردنا استخراج هذا الناتج من قاعده البيانات واخراجه للمستخدم الناتج التلقائي سيكون
I\\'M
وهو غير مطابق للمدخلات بأى حال من الاحوال ولذلك وجب علينا استخدام داله stripslashes() وسيكون النتيجه
I'M
ولكن لماذا نستخدم هذا الكم من الدوال مادام فى امكاننا ان نستخدم داله واحده فقط وهى addslashes() ؟؟؟
تذكرو دائما ان المبرمج المحترف هو من يصل للنتيجه بأقل عدد من الاسطر البرمجيه
لذلك اننى انصح بغلق الـــ magic_quotes_gpc
واستخدام داله addslashes() فقط عند ادخال بيانات لقاعده بيانات فقط
يمكنك غلق الــ magic_quotes_gpc وجعله = OFF عن طريق اضافه الكود التالى لملف .htaccess
كود:
<IfModule mod_php4.c>
php_flag magic_quotes_gpc off
</IfModule>
واذا لم يمكنك يمكنك استخدام هذه الداله فى كافه ملفاتك عن طريق وضعها فى ملف خاص وتضمينها فى بدايه كل ملف ..
وفائده هذه الداله هو تخطى الــ شرطات المائله التى تنتج نتيجه فتح خيار magic_quotes_gpc
كود PHP:
function strip_magic_quotes($arr)
{
foreach ($arr as $k => $v)
{
if (is_array($v))
{ $arr[$k] = strip_magic_quotes($v); }
else
{ $arr[$k] = stripslashes($v); }
}
return $arr;
}
if (get_magic_quotes_gpc())
{
if (!empty($_GET)) { $_GET = strip_magic_quotes($_GET); }
if (!empty($_POST)) { $_POST = strip_magic_quotes($_POST); }
if (!empty($_COOKIE)) { $_COOKIE = strip_magic_quotes($_COOKIE); }
}
ereg ام preg ??
نعلم جميعا اهميه ال regular expression او ما تسمى بالتعبيرات النظاميه او الاعتياديه
وعندما نقوم باستخدام الدوال الخاصه بالــ regular expression نقوم باستخدام داله ereg او داله preg
ولكن فى الحقيقه الاختيار الصائب هو استخدام داله preg
فهى من حيث السرعه شعف سرعه ereg بالاضافه الى انها تدعم عمليات اضافيه كثيره خاصه بالــ
regular expression
ولذلك لا ارى داعى من استخدام داله ereg
المانول الخاص بالداله preg
http://www.php.net/manual/en/ref.pcre.php
النموذج النحوى لها
http://www.php.net/manual/en/pcre.pattern.syntax.php
وسوم بدايه الــ PHP (php tags)
معظمنا يعلم ان صفحات ال php من الممكن ان تبدأ بأربعه اشكال من الوسوم ومن خلالها يعلم السيرفر ان التطبيقات القادمه اليه هى تطبيقات
php
وهذه الوسوم هى
الوسم الكامل [full PHP open tag]
الطرق الاخرى
كود PHP:
<?
?>
<%
%>
<SCRIPT language="php">
</script>
وبالطبع يعتمد عمل بعض هذه الوسوم على اعدادات ملف الاعدادات الخاص بال php
[short_open_tag]
ولذلك ننصح جميع المبرمجين باستخدام الوسوم الكامله الخاصه بالــ php
وهى
انظرو الى هذا الكود
هذا لن يعمل فى حاله غلق خيار الـــ [short_open_tag]
والافضل ان نستخدم الطريقه العاديه او الطويله
كود PHP:
<?php echo $var?>
اجعل كودك البرمجى سهل القراءه
من المفيد جدا ان تجعل برنامجك سهل القراءه وذلك لاسباب عديده منها سهوله عمليه اكتشاف الاخطاء بعد ذلك وسهوله التطوير
وجعله سهلا للمبرمجين الاخرين , فعلى سبيل المثال لا ننصح باستخدام القواعد الشرطيه بهذا الشكل
كود PHP:
if (): ... endif;
ويفضل ان تكون بهذا الشكل
كود PHP:
if (condation)
{
//افعل ما تريد ;
}
التبليغ عن الاخطاء
من المفيد حقا ان تجبر الاسكريبت على اخبارك بكل الاخطاء البرمجيه حتى تكون على علم ودرايه بها وهذا يكون عن طريق الــ error_reporting فلا تقبح الاخطاء ...
يمكنك تعديل خيار تقارير الاخطاء عن طريق ملف الاعدادات php.ini او عن طريق
داله error_reporting()
النصوص
يوجد لدى عده ملحوظات على النصوص
1- عند استخدام النصوص يفضل ان توضع بين single quotes فى كل الحالات اذا امكن طالما انها لا تحتوى على متغيرات او
single quotes او \n الخ , فهذا يجعل الامر سهلا على المترجم
2- عند استخدام المصفوفات واضافه النصوص اليها لابد ان نضعها بين single quotes (') حتى لا تعامل على انها ثوابت
كود PHP:
// صحيح لانه متغير
echo $row[$key];
// خطا , الا فى حاله كون الــ Key ثابت
echo $row[key];
// صحيح
echo $row['key'];
// صحيح طالما انه موجود داخل نص
echo "Text: $row[key]";
3- عند الدمج مابين الــ php والــ html يفضل فصل الاكواد عن بعضها
مثال
كود PHP:
<?PHP
echo "<html><head><title>site name</title></head>
<body>";
echo $anyvar;
echo "</body></html>";
?>
فى المثال السابق لاحظنا تداخل وسوم اللغتين الــ php و ال html معا
ولكن فى الاكواد الكبيره يفضل فصل الاثنين عن بعضهما لزياده سرعه الترجمه
مثال
كود:
<html><head><title>site name</title></head><body>
<?php
echo $anyvar;
?>
</body></html>
هنا قمنا بفصل الــ html عن الــ php وستلاحظون الفرق فى السرعه عند كبر حجم التطبيقات
رابط الموضوع الاصلى
http://www.brmaga.com/vb/thread9.html
وللحديث بقيه