PHP बग्स #२१ ते #३०: सामान्य चुका

PHP तुम्हाला कोणतीही चेतावणी न देता चुका करण्याची परवानगी देते. अनेकदा गोष्टी अयशस्वी होऊनही ते चालू राहते. यामुळे डेटाचे छुपे नुकसान (silent data corruption) किंवा सुरक्षा त्रुटी (security holes) निर्माण होऊ शकतात.

टाळण्यासारखे १० महत्त्वाचे बग्स खालीलप्रमाणे आहेत:

  • Multibyte Text strlen() हे बाइट्स मोजते, अक्षरे नाही. यामुळे हिंदी किंवा इमोजी मजकूर खराब होऊ शकतो. त्याऐवजी mb_strlen() वापरा.

  • Unvalidated API Calls file_get_contents() शांतपणे (silently) अयशस्वी होऊ शकते. json_decode() हे null परत करू शकते. प्रतिसाद (response) 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) अंक साठवा.

  • Shared Static Properties Static प्रॉपर्टीज क्लासच्या असतात, ऑब्जेक्टच्या नाही. प्रत्येक इन्स्टन्स (instance) तोच डेटा शेअर करतो. वापरकर्त्याशी संबंधित डेटासाठी नियमित public प्रॉपर्टीज वापरा.

  • Redirects Without Exit header("Location: ...") फक्त ब्राउझरला सूचना पाठवते. सर्व्हर स्क्रिप्ट चालवणे सुरूच ठेवतो. रिडायरेक्ट (redirect) केल्यानंतर नेहमी exit() कॉल करा.

  • SQL Injection क्वेरी स्ट्रिंग्समध्ये थेट व्हेरिएबल्स वापरल्यामुळे हॅकर्स तुमच्या डेटाबेसवर नियंत्रण मिळवू शकतात. PDO सोबत prepared statements वापरा.

  • Memory Crashes file_get_contents() संपूर्ण फाईल्स RAM मध्ये लोड करते. मोठ्या फाईल्समुळे यामुळे तुमचा सर्व्हर क्रॅश होऊ शकतो. फाईल्स ओळीने (line by line) वाचण्यासाठी fopen() आणि fgets() वापरा.

  • Silent Database Errors PDO बाय डीफॉल्ट शांत राहते. त्रुटी (errors) एक्सेप्शन्स (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