۱۰ باگ رایج PHP که هر مبتدی مرتکب می‌شود

کد می‌نویسید. صفحه را رفرش می‌کنید. یک صفحه سفید و خالی می‌بینید.

این اتفاق به این دلیل می‌افتد که PHP به صورت پیش‌فرض خطاها را بی‌صدا (silent) گزارش می‌کند. شما باید در طول فرآیند توسعه، آن را مجبور به نمایش خطاها کنید.

این خطوط را به بالای فایل‌های خود اضافه کنید:

ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);

از این روش در محیط عملیاتی (production) استفاده نکنید. در عوض از لاگ‌های فایل استفاده کنید.

در اینجا ۱۰ اشتباه رایج و نحوه رفع آن‌ها آورده شده است:

  • فراموش کردن نقطه-ویرگول (Semicolons) اگر نقطه-ویرگول را فراموش کنید، PHP از کار می‌افتد. این موضوع اغلب باعث کرش بی‌صدا می‌شود. راه حل: مطمئن شوید که هر دستور با یک نقطه-ویرگول تمام می‌شود.

  • مقایسه ضعیف (== در مقابل ===) علامت مساوی دوگانه، تبدیل نوع (type coercion) انجام می‌دهد. این امر منجر به خطاهای منطقی می‌شود. راه حل: از علامت مساوی سه‌گانه (===) استفاده کنید. این علامت هم مقدار و هم نوع را بررسی می‌کند.

  • متغیرهای تعریف نشده (Undefined Variables) استفاده از یک متغیر قبل از مقداردهی به آن، منطق برنامه شما را مختل می‌کند. راه حل: از عملگر null coalescing استفاده کنید. مثال: $name = $_GET['name'] ?? 'Guest';

  • محدوده متغیرهای سراسری (Global Variable Scope) توابع نمی‌توانند متغیرهای خارج از خود را ببینند. راه حل: متغیرها را به عنوان پارامتر به توابع پاس دهید.

  • تزریق SQL (SQL Injection) ساخت کوئری‌ها با استفاده از ورودی کاربر، به هکرها اجازه می‌دهد تا داده‌ها را سرقت کنند. راه حل: از prepared statements به همراه placeholderها (?) استفاده کنید.

  • اسکریپت‌نویسی بین‌سایتی (XSS) چاپ مستقیم ورودی کاربر اجازه می‌دهد تا اسکریپت‌های مخرب در مرورگر اجرا شوند. راه حل: خروجی را در تابع htmlspecialchars() قرار دهید.

  • هدرها قبلاً ارسال شده‌اند (Headers Already Sent) اگر قبلاً متنی را به مرورگر ارسال کرده باشید، نمی‌توانید کاربر را Redirect کنید. حتی یک فاصله (space) ساده هم باعث این خطا می‌شود. راه حل: فراخوانی‌های header() را در بالاترین قسمت فایل قرار دهید. همیشه بعد از یک redirect از exit() استفاده کنید.

  • کلیدهای تعریف نشده در آرایه (Undefined Array Keys) دسترسی به کلیدی در فرم که وجود ندارد، باعث ایجاد هشدار (warning) می‌شود. راه حل: برای تمام داده‌های $_POST و $_GET از عملگر null coalescing استفاده کنید.

  • Include در مقابل Require دستور include اگر فایلی وجود نداشته باشد، فقط یک هشدار نشان می‌دهد. اسکریپت به اجرا ادامه می‌دهد و بعداً کرش می‌کند. راه حل: برای فایل‌های حیاتی مانند اتصال به پایگاه داده، از require_once استفاده کنید.

  • مقادیر بازگشتی بررسی نشده (Unchecked Return Values) بسیاری از توابع PHP در صورت شکست، مقدار false را برمی‌گردانند. اگر بلافاصله از آن نتیجه استفاده کنید، با خطاهای بیشتری مواجه می‌شوید. راه حل: قبل از استفاده از نتیجه، بررسی کنید که آیا false است یا خیر.

خلاصه‌ای برای موفقیت:

  • گزارش خطا را در محیط توسعه فعال کنید.
  • برای تمام مقایسه‌ها از === استفاده کنید.
  • تمام ورودی‌های کاربر را پاکسازی (Sanitize) کنید.
  • مقادیر بازگشتی را بررسی کنید.

منبع: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh