𝗣𝗛𝗣 𝗕𝘂𝗴𝘀 #𝟮𝟭 𝘁𝗼 #𝟯𝟬: 𝗖𝗼𝗺𝗺𝗼𝗻 𝗠𝗶𝘀𝘁𝗮𝗸𝗲𝘀

PHP آپ کو بغیر کسی وارننگ کے غلطیاں کرنے کی اجازت دیتا ہے۔ یہ اکثر چیزیں ناکام ہونے کے باوجود چلتا رہتا ہے۔ اس سے خاموشی سے ڈیٹا کی خرابی (data corruption) یا سیکیورٹی کے مسائل پیدا ہو سکتے ہیں۔

یہاں 10 اہم بگس (bugs) ہیں جن سے بچنا ضروری ہے:

  • Multibyte Text strlen() بائٹس (bytes) گنتا ہے، حروف (characters) نہیں۔ اس سے ہندی یا ایموجی ٹیکسٹ خراب ہو جاتا ہے۔ اس کے بجائے mb_strlen() استعمال کریں۔

  • Unvalidated API Calls file_get_contents() خاموشی سے ناکام ہو سکتا ہے۔ json_decode() نل (null) واپس کر سکتا ہے۔ ہمیشہ چیک کریں کہ کیا ریسپانس false ہے اور json_last_error() کی تصدیق کریں۔

  • Temporary Cookies بغیر ایکسپائری ڈیٹ کے setcookie() براؤزر بند ہونے پر کوکی کو ڈیلیٹ کر دیتا ہے۔ ایکسپائری ٹائم سیٹ کریں اور XSS حملوں سے بچنے کے لیے httponly فلیگ استعمال کریں۔

  • Unsafe File Uploads صرف فائل ایکسٹینشن چیک کرنا کافی نہیں ہے۔ ہیکرز shell.php کا نام بدل کر shell.jpg رکھ دیتے ہیں۔ اصل MIME ٹائپ چیک کرنے کے لیے finfo_file() استعمال کریں۔

  • Math with Formatted Strings PHP کوما (comma) پر نمبر پڑھنا روک دیتا ہے۔ "1,299.00" بن جاتا ہے 1۔ حساب کتاب کرنے سے پہلے str_replace() کے ذریعے کوما ہٹا دیں۔ اپنے ڈیٹا بیس میں خام نمبر (raw numbers) اسٹور کریں۔

  • Shared Static Properties اسٹیٹک پراپرٹیز کلاس سے تعلق رکھتی ہیں، آبجیکٹ سے نہیں۔ ہر انسٹنس (instance) ایک ہی ڈیٹا شیئر کرتا ہے۔ صارف کے مخصوص ڈیٹا کے لیے عام پبلک پراپرٹیز استعمال کریں۔

  • Redirects Without Exit header("Location: ...") صرف براؤزر کو ایک ہدایت بھیجتا ہے۔ سرور اسکرپٹ کو چلانا جاری رکھتا ہے۔ ری ڈائریکٹ کے بعد ہمیشہ exit() کال کریں۔

  • SQL Injection ویری ایبلز کو براہ راست کوئری اسٹرنگز میں ڈالنے سے ہیکرز آپ کے ڈیٹا بیس کو کنٹرول کر سکتے ہیں۔ PDO کے ساتھ prepared statements استعمال کریں۔

  • Memory Crashes file_get_contents() پوری فائلوں کو RAM میں لوڈ کرتا ہے۔ بڑی فائلوں پر یہ آپ کے سرور کو کریش کر دیتا ہے۔ فائلوں کو لائن بہ لائن پڑھنے کے لیے fopen() اور fgets() استعمال کریں۔

  • Silent Database Errors PDO ڈیفالٹ طور پر خام رہتا ہے۔ ایررز exceptions پھینکنے کے بجائے false واپس کرتے ہیں۔ PDO::ATTR_ERRMODE کو PDO::ERRMODE_EXCEPTION پر سیٹ کریں۔

حل سادہ ہے: واضح رہیں۔ ہر ریٹرن ویلیو کو چیک کریں۔ ہر ان پٹ کی تصدیق کریں۔ کبھی یہ فرض نہ کریں کہ کوئی فنکشن کام کر گیا ہے۔

مکمل آرٹیکل: https://dev.to/bikkisingh/php-bugs-21-to-30-common-mistakes-every-php-developer-must-knowpublished-5hbp