أهم أخطاء مطوري PHP المبتدئين: كيفية تجنبها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة

لا تزال PHP واحدة من أكثر اللغات شيوعًا لتطوير الويب، على الرغم من ظهور العديد من البدائل. ومع ذلك، غالبًا ما يرتكب المبتدئون أخطاء نموذجية يمكن أن تؤدي إلى ثغرات أمنية أو ضعف الأداء أو ببساطة تعليمات برمجية لا تعمل. في هذه المقالة، سنحلل أهم 5 أخطاء يرتكبها مطورو PHP المبتدئون، ونعرض أمثلة على التعليمات البرمجية غير الصحيحة، ونقدم توصيات لإصلاحها. ستكون المادة مفيدة لكل من بدأ للتو في تعلم PHP ولأولئك الذين يرغبون في تحديث معلوماتهم.



1. تجاهل الأمان: حقن SQL والبرمجة النصية عبر المواقع (XSS)

الخطأ الأكثر شيوعًا وخطورة هو التصفية غير الكافية لبيانات المستخدم. يأخذ العديد من المبتدئين البيانات مباشرة من $_GET أو $_POST ويُدخلونها في استعلامات SQL أو يعرضونها على الصفحة دون الهروب منها.



تعليمات برمجية غير صحيحة (حقن SQL)

<?php$username = $_POST['username'];$password = $_POST['password'];

// استعلام ضعيف$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";$result = mysqli_query($conn, $sql);?>

إذا أدخل مهاجم القيمة ' OR '1'='1 في حقل اسم المستخدم، فسيُرجع الاستعلام جميع المستخدمين، وسيتم تسجيل الدخول بدون كلمة مرور.



تعليمات برمجية صحيحة (باستخدام العبارات المعدة)

<?php$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");$stmt->bind_param("ss", $username, $password);$stmt->execute();$result = $stmt->get_result();?>

ينطبق الشيء نفسه على إخراج البيانات في HTML. استخدم دائمًا htmlspecialchars() للهروب من الأحرف الخاصة:

<?phpecho htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');?>


2. إهمال الكتابة الصارمة (Strict Typing)

PHP هي لغة مكتوبة ديناميكيًا، وغالبًا ما يعتمد المبتدئون على التحويل التلقائي للنوع. يمكن أن يؤدي هذا إلى نتائج غير متوقعة، خاصة في المقارنات.



مثال على سلوك غير واضح

<?php$value = "100 apples";if ($value == 100) {    echo "Equals 100"; // سيتم طباعة "Equals 100"!}?>

يتم تحويل السلسلة النصية "100 apples" ضمنيًا إلى الرقم 100، وبالتالي يكون الشرط صحيحًا. استخدم المقارنة الصارمة (===) والكتابة الصارمة في المشاريع الحديثة:



توصيات

  • قم بتعريف declare(strict_types=1); في بداية كل ملف.
  • استخدم المقارنة الصارمة === و !== بدلاً من == و !=.
  • حدد أنواع وسيطات الدوال وقيم الإرجاع بشكل صريح.


<?phpdeclare(strict_types=1);

function calculateTotal(float $price, int $quantity): float { return $price * $quantity;}?>


3. تسرب الذاكرة وإدارة الموارد غير الفعالة

غالبًا ما ينسى المبتدئون إغلاق الملفات أو اتصالات قاعدة البيانات أو تحرير الذاكرة بعد العمل مع البيانات الكبيرة. تعمل أداة جمع القمامة (Garbage Collector) في PHP تلقائيًا، لكن هذا لا يعني أنه يمكنك تجاهل إدارة الموارد.



خطأ نموذجي: اتصال غير مغلق

<?php$conn = new mysqli($host, $user, $pass, $db);// ... الكثير من التعليمات البرمجية ...// نسي استدعاء $conn->close();?>


النهج الصحيح: استخدام try-finally أو مديري الموارد

<?php$conn = new mysqli($host, $user, $pass, $db);try {    // العمل مع قاعدة البيانات} finally {    $conn->close();}?>

للعمل مع الملفات، استخدم fopen()/fclose() في أزواج، وبالنسبة للمصفوفات الكبيرة، استخدم unset() بعد الاستخدام. في الإصدارات الحديثة من PHP، يمكنك استخدام المولدات (yield) لمعالجة مجموعات البيانات الكبيرة دون تحميلها كلها في الذاكرة.



4. خلط المنطق والعرض التقديمي

المدونات

توصيات الكتب