𝟭𝟬 𝗣𝗛𝗣 𝗕𝘂𝗴𝘀 𝗧𝗵𝗮𝘁 𝗕𝗿𝗲𝗮𝗸 𝗥𝗲𝗮𝗹 𝗣𝗿𝗼𝗷𝗲𝗰𝘁𝘀

کوڈ آپ کے کمپیوٹر پر کام کرتا ہے۔ آپ اسے سرور پر اپ لوڈ کرتے ہیں۔ سب کچھ خراب ہو جاتا ہے۔ لاگز (logs) میں کوئی غلطی نظر نہیں آتی۔ آپ کو صرف غلط آؤٹ پٹ نظر آتا ہے۔

یہ بگ درسی کتب سے نہیں آتے۔ یہ حقیقی لاگ ان سسٹمز، اسٹورز اور APIs سے آتے ہیں۔ یہ کوڈ ریویو کے دوران ٹھیک لگتے ہیں لیکن پروڈکشن (production) میں ناکام ہو جاتے ہیں۔

یہاں بگ نمبر 11 سے 20 تک اور انہیں ٹھیک کرنے کے طریقے دیے گئے ہیں۔

• انفینٹ لوپس (Infinite Loops) کاؤنٹر کو بڑھانا بھول جانا PHP پروسیس کو لاک کر دیتا ہے۔ اس سے آپ کا پورا سرور کریش ہو سکتا ہے۔ حل: ہمیشہ یقینی بنائیں کہ آپ کے لوپ کاؤنٹرز بڑھ رہے ہیں۔

• کیس سینسیٹیوٹی (Case-Sensitivity) کے مسائل PHP "Admin" اور "admin" کو مختلف اسٹرنگز (strings) کے طور پر دیکھتا ہے۔ یہ ایکسیس کنٹرول کو خراب کر دیتا ہے۔ حل: اسٹرنگز کا موازنہ کرنے سے پہلے strtolower() کا استعمال کریں۔

• ریاضی اور ٹرنکیشن (Math and Truncation) ڈیسیمل (decimal) پر (int) کا استعمال اسے راؤنڈ (round) نہیں کرتا، بلکہ اسے کاٹ دیتا ہے۔ اس سے بلنگ میں مالیاتی غلطیاں ہوتی ہیں۔ حل: round() یا number_format() کا استعمال کریں۔

• JSON کی غلطیاں json_decode ڈیفالٹ کے طور پر ایک آبجیکٹ (object) واپس کرتا ہے۔ اگر آپ اسے ایرے (array) کی طرح استعمال کرنے کی کوشش کریں گے، تو اسکرپٹ فیل ہو جائے گا۔ حل: ایرے حاصل کرنے کے لیے دوسرے آرگیومنٹ کے طور پر true پاس کریں۔

• XSS سیکیورٹی خطرات صارف کے ان پٹ کو براہ راست پرنٹ کرنے سے حملہ آور اسکرپٹس انجیکٹ (inject) کر سکتے ہیں۔ حل: ہمیشہ htmlspecialchars() کا استعمال کریں۔

• پاتھ کی ناکامی (Path Failures) ریلیٹیو پاتھ (Relative paths) لوکل مشینوں پر کام کرتے ہیں لیکن لائیو سرورز پر ناکام ہو جاتے ہیں۔ حل: ایبسولیوٹ پاتھ (absolute paths) کے لیے __DIR__ کانسٹنٹ کا استعمال کریں۔

• ڈپلیکیٹ ڈیٹا صارفین اکثر سبمٹ بٹن پر ڈبل کلک کر دیتے ہیں۔ اس سے ڈیٹا بیس میں ڈپلیکیٹ اندراجات (entries) ہو جاتے ہیں۔ حل: پہلے چیک کریں کہ ریکارڈ موجود ہے یا نہیں اور اپنے ڈیٹا بیس میں UNIQUE کنسٹرینٹ (constraint) کا استعمال کریں۔

• ایریز کو ضم کرنا (Merging Arrays) array_merge() نیومیرک کیز (numeric keys) کو صفر پر ری سیٹ کر دیتا ہے۔ یہ آپ کے ڈیٹا اسٹرکچر کو تباہ کر دیتا ہے۔ حل: اپنی کیز کو برقرار رکھنے کے لیے + آپریٹر یا array_replace() کا استعمال کریں۔

• پوشیدہ غلطیاں (Invisible Errors) پروڈکشن میں غلطیوں کو بند کرنا سیکیورٹی کے لیے اچھا ہے۔ لیکن اگر آپ انہیں لاگ نہیں کرتے تو یہ ڈی بگنگ (debugging) کے لیے برا ہے۔ حل: log_errors کو 1 پر سیٹ کریں اور error_log پاتھ متعین کریں۔

• لوپ ریفرنسز (Loop References) ایک foreach لوپ ڈیٹا کی کاپی کو تبدیل کرتا ہے، اصل ایرے کو نہیں۔ حل: ریفرنس بنانے کے لیے & علامت کا استعمال کریں، لیکن لوپ کے بعد ہمیشہ ویری ایبل کو unset کر دیں۔

ان میں سے زیادہ تر بگ غلطیاں (errors) نہیں دکھاتے۔ PHP چلتا رہتا ہے، لیکن یہ غلط نتائج دیتا ہے۔ یہی چیز انہیں خطرناک بناتی ہے۔

کوڈ لکھنا آسان ہے۔ پروڈکشن کے لیے تیار کوڈ لکھنے کے لیے یہ سمجھنا ضروری ہے کہ چیزیں کیسے ناکام ہوتی ہیں۔

مکمل گائیڈ یہاں پڑھیں: https://dev.to/bikkisingh/10-php-bugs-that-break-real-projects-and-how-to-fix-them-part-2-7hm