𝟭𝟬টি PHP বাগ যা রিয়েল প্রজেক্টকে অচল করে দেয়

কোড আপনার কম্পিউটারে কাজ করে। আপনি এটি সার্ভারে পুশ করেন। সবকিছু ভেঙে চুরমার হয়ে যায়। লগ-এ কোনো এরর (error) দেখা যায় না। আপনি শুধু ভুল আউটপুট দেখতে পান।

এই বাগগুলো পাঠ্যবই থেকে আসে না। এগুলো আসে রিয়েল লগইন সিস্টেম, স্টোর এবং API থেকে। কোড রিভিউ করার সময় এগুলো ঠিক মনে হলেও প্রোডাকশনে ব্যর্থ হয়।

এখানে #১১ থেকে #২০ নম্বর বাগ এবং সেগুলো কীভাবে ঠিক করতে হয় তা দেওয়া হলো।

• Infinite Loops (ইনফিনিট লুপ) কাউন্টার ইনক্রিমেন্ট করতে ভুলে গেলে PHP প্রসেসটি লক হয়ে যায়। এটি আপনার পুরো সার্ভার ক্র্যাশ করতে পারে। Fix: সর্বদা নিশ্চিত করুন যে আপনার লুপ কাউন্টারগুলো বাড়ছে।

• Case-Sensitivity Issues (কেস-সেনসিটিভিটি সমস্যা) PHP "Admin" এবং "admin"-কে আলাদা স্ট্রিং হিসেবে দেখে। এটি অ্যাক্সেস কন্ট্রোলকে নষ্ট করে দেয়। Fix: স্ট্রিং তুলনা করার আগে strtolower() ব্যবহার করুন।

• Math and Truncation (গণিত এবং ট্রাঙ্কেশন) একটি ডেসিমালের ওপর (int) ব্যবহার করলে সেটি রাউন্ড (round) হয় না। এটি সংখ্যাটিকে কেটে ফেলে। এর ফলে বিলিং-এ আর্থিক ভুল হতে পারে। Fix: round() বা number_format() ব্যবহার করুন।

• JSON Errors (JSON এরর) json_decode ডিফল্টভাবে একটি অবজেক্ট রিটার্ন করে। আপনি যদি এটিকে অ্যারের মতো ব্যবহার করার চেষ্টা করেন, তবে স্ক্রিপ্টটি ফেইল করবে। Fix: একটি অ্যারে পেতে দ্বিতীয় আর্গুমেন্ট হিসেবে true পাস করুন।

• XSS Security Risks (XSS সিকিউরিটি ঝুঁকি) সরাসরি ইউজার ইনপুট প্রিন্ট করলে আক্রমণকারীরা স্ক্রিপ্ট ইনজেক্ট করার সুযোগ পায়। Fix: সর্বদা htmlspecialchars() ব্যবহার করুন।

• Path Failures (পাথ ফেইলর) রিলেটিভ পাথ লোকাল মেশিনে কাজ করলেও লাইভ সার্ভারে ব্যর্থ হয়। Fix: অ্যাবসোলিউট পাথের জন্য __DIR__ কনস্ট্যান্ট ব্যবহার করুন।

• Duplicate Data (ডুপ্লিকেট ডেটা) ব্যবহারকারীরা প্রায়ই সাবমিট বাটনে ডাবল-ক্লিক করেন। এটি ডাটাবেসে ডুপ্লিকেট এন্ট্রি তৈরি করে। Fix: প্রথমে রেকর্ডটি আছে কিনা তা পরীক্ষা করুন এবং আপনার ডাটাবেসে একটি UNIQUE কনস্ট্রেইন্ট ব্যবহার করুন।

• Merging Arrays (অ্যারে মার্জ করা) array_merge() নিউমেরিক কী (numeric keys) গুলোকে শূন্যে রিসেট করে দেয়। এটি আপনার ডেটা স্ট্রাকচার নষ্ট করে দেয়। Fix: আপনার কী (keys) গুলো ঠিক রাখতে + অপারেটর বা array_replace() ব্যবহার করুন।

• Invisible Errors (অদৃশ্য এরর) প্রোডাকশনে এরর বন্ধ রাখা নিরাপত্তার জন্য ভালো। কিন্তু আপনি যদি সেগুলো লগ না করেন, তবে ডিবাগিং করার জন্য এটি খারাপ। Fix: log_errors কে 1 সেট করুন এবং একটি error_log পাথ ডিফাইন করুন।

• Loop References (লুপ রেফারেন্স) একটি foreach লুপ ডেটার একটি কপি পরিবর্তন করে, আসল অ্যারে নয়। Fix: রেফারেন্স তৈরি করতে & সিম্বল ব্যবহার করুন, তবে লুপের পরে সর্বদা ভেরিয়েবলটি unset করে দিন।

এই বাগগুলোর বেশিরভাগই কোনো এরর দেখায় না। PHP চলতে থাকে, কিন্তু এটি ভুল ফলাফল প্রদান করে। এটিই এদেরকে বিপজ্জনক করে তোলে।

কোড লেখা সহজ। প্রোডাকশন-রেডি কোড লিখতে হলে জিনিসগুলো কীভাবে ব্যর্থ হয় তা বোঝা প্রয়োজন।

সম্পূর্ণ গাইডটি এখানে পড়ুন: https://dev.to/bikkisingh/10-php-bugs-that-break-real-projects-and-how-to-fix-them-part-2-7hm