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

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

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

توسعه خود را با اضافه کردن این خطوط به ابتدای فایل خود شروع کنید:

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

این کار PHP را مجبور می‌کند تا آنچه اشتباه است را به شما نشان دهد. از این روش در محیط عملیاتی (production) استفاده نکنید.

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

۱. فراموش کردن نقطه‌ویرگول (Semicolons) PHP برای پایان دادن به یک دستور به نقطه‌ویرگول نیاز دارد. اگر یکی را فراموش کنید، اسکریپت متوقف می‌شود. راه حل: همیشه خطوط خود را با یک نقطه‌ویرگول تمام کنید.

۲. مقایسه سست (Loose Comparison) عملگر == قبل از مقایسه، انواع داده (types) را تغییر می‌دهد. این امر منجر به نتایج اشتباه می‌شود. راه حل: از === استفاده کنید. این عملگر هم مقدار و هم نوع داده را بررسی می‌کند.

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

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

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

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

۷. خطاهای هدر (Header Errors) شما نمی‌توانید پس از ارسال هرگونه متن یا فاصله (space) به مرورگر، یک هدر ارسال کنید. راه حل: فراخوانی‌های header() را در بالاترین قسمت قرار دهید. همیشه بعد از یک redirect از exit() استفاده کنید.

۸. کلیدهای مفقود شده در فرم دسترسی به کلیدی در فرم که وجود ندارد باعث بروز خطا می‌شود. راه حل: از عملگر null coalescing برای ارائه یک مقدار پیش‌فرض استفاده کنید.

۹. تفاوت include و require دستور include اگر فایلی مفقود باشد، فقط یک هشدار (warning) می‌دهد. اسکریپت به اجرا ادامه می‌دهد و بعداً کرش می‌کند. راه حل: برای فایل‌های حیاتی مانند اتصالات پایگاه داده، از require_once استفاده کنید.

۱۰. مقادیر بازگشتی بررسی نشده بسیاری از توابع PHP در صورت شکست، مقدار false را برمی‌گردانند. استفاده از آن مقدار false در مرحله بعد باعث کرش کردن برنامه می‌شود. راه حل: قبل از استفاده از نتیجه، بررسی کنید که آیا تابع مقدار false برگردانده است یا خیر.

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

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