𝟭𝟬 𝗣𝗛𝗣 பிழைகள் உண்மையான புராஜெக்ட்களைச் சிதைக்கின்றன

உங்கள் கணினியில் கோட் (Code) சரியாக வேலை செய்கிறது. அதை நீங்கள் சர்வரில் பதிவேற்றுகிறீர்கள். அனைத்தும் உடைந்து போகின்றன. லாக்ஸில் (logs) எந்த பிழைகளும் தெரிவதில்லை. தவறான வெளியீடு (output) மட்டுமே உங்களுக்குத் தெரிகிறது.

இந்த பிழைகள் பாடப்புத்தகங்களில் இருந்து வருவதில்லை. இவை உண்மையான லாகின் சிஸ்டம்கள், ஸ்டோர்கள் மற்றும் APIs ஆகியவற்றிலிருந்து வருகின்றன. கோட் ரிவியூவின் போது இவை சரியாகத் தோன்றும், ஆனால் ப்ரொடக்ஷனில் (production) தோல்வியடையும்.

இதோ பிழைகள் #11 முதல் #20 வரை மற்றும் அவற்றைச் சரிசெய்யும் முறைகள்.

• முடிவில்லா லூப்கள் (Infinite Loops) ஒரு கவுண்டரை (counter) அதிகரிக்க மறப்பது PHP செயல்முறையை முடக்கிவிடும். இது உங்கள் முழு சர்வரையும் செயலிழக்கச் செய்யலாம். சரிசெய்ய: உங்கள் லூப் கவுண்டர்கள் அதிகரிப்பதை எப்போதும் உறுதி செய்யவும்.

• கேஸ்-சென்சிட்டிவிட்டி (Case-Sensitivity) சிக்கல்கள் PHP "Admin" மற்றும் "admin" ஆகியவற்றை வெவ்வேறு சரங்களாக (strings) கருதுகிறது. இது அணுகல் கட்டுப்பாட்டை (access control) பாதிக்கும். சரிசெய்ய: சரங்களை ஒப்பிடுவதற்கு முன் strtolower() ஐப் பயன்படுத்தவும்.

• கணிதம் மற்றும் ட்ரன்கேஷன் (Truncation) ஒரு தசம எண்ணில் (decimal) (int) பயன்படுத்துவது அதை ரவுண்ட் (round) செய்யாது. அது எண்ணை அப்படியே வெட்டிவிடும். இது பில்லிங்கில் நிதி சார்ந்த பிழைகளை ஏற்படுத்தும். சரிசெய்ய: round() அல்லது number_format() ஐப் பயன்படுத்தவும்.

• JSON பிழைகள் json_decode இயல்பாக ஒரு ஆப்ஜெக்ட்டைத் (object) திருப்பித் தரும். அதை நீங்கள் ஒரு அரே (array) போலப் பயன்படுத்த முயன்றால், ஸ்கிரிப்ட் தோல்வியடையும். சரிசெய்ய: ஒரு அரேவைப் பெற இரண்டாவது ஆர்குமெண்ட்டாக true என்பதை அனுப்பவும்.

• XSS பாதுகாப்பு அபாயங்கள் பயனர் உள்ளீட்டை (user input) நேரடியாக அச்சிடுவது தாக்குபவர்கள் ஸ்கிரிப்ட்களைச் செலுத்த அனுமதிக்கிறது. சரிசெய்ய: எப்போதும் htmlspecialchars() ஐப் பயன்படுத்தவும்.

• பாத் (Path) தோல்விகள் ரிலேட்டிவ் பாத் (Relative paths) லோக்கல் மெஷின்களில் வேலை செய்யும், ஆனால் நேரடி சர்வர்களில் தோல்வியடையும். சரிசெய்ய: அப்ஸோலூட் பாத் (absolute paths) க்காக __DIR__ கான்ஸ்டன்ட்டைப் பயன்படுத்தவும்.

• நகல் தரவு (Duplicate Data) பயனர்கள் பெரும்பாலும் சப்மிட் பட்டன்களை இருமுறை கிளிக் செய்கிறார்கள். இது தரவுத்தளத்தில் (database) நகல் பதிவுகளை உருவாக்குகிறது. சரிசெய்ய: பதிவு ஏற்கனவே உள்ளதா என்பதை முதலில் சரிபார்க்கவும் மற்றும் உங்கள் தரவுத்தளத்தில் UNIQUE constraint ஐப் பயன்படுத்தவும்.

• அரேக்களை இணைத்தல் (Merging Arrays) array_merge() எண் சார்ந்த கீய்களை (numeric keys) பூஜ்ஜியத்திற்கு மாற்றுகிறது. இது உங்கள் தரவு அமைப்பை (data structure) சிதைத்துவிடும். சரிசெய்ய: உங்கள் கீய்களைத் தக்கவைக்க + ஆபரேட்டர் அல்லது array_replace() ஐப் பயன்படுத்தவும்.

• கண்ணுக்குத் தெரியாத பிழைகள் ப்ரொடக்ஷனில் பிழைகளை முடக்குவது பாதுகாப்பிற்கு நல்லது. ஆனால் அவற்றை நீங்கள் லாக் (log) செய்யவில்லை என்றால், டிபக்கிங்கிற்கு (debugging) அது மோசமானது. சரிசெய்ய: log_errors1 என அமைக்கவும் மற்றும் error_log பாதையை வரையறுக்கவும்.

• லூப் ரெஃபரன்ஸ்கள் (Loop References) ஒரு foreach லூப் தரவின் நகலை மட்டுமே மாற்றியமைக்கும், அசல் அரேவை அல்ல. சரிசெய்ய: ஒரு ரெஃபரன்ஸை உருவாக்க & குறியீட்டைப் பயன்படுத்தவும், ஆனால் லூப்பிற்குப் பிறகு எப்போதும் அந்த வேரியபிளை unset செய்யவும்.

இந்த பிழைகளில் பெரும்பாலானவை பிழைகளைத் (errors) திரையில் காட்டாது. PHP தொடர்ந்து இயங்கும், ஆனால் அது தவறான முடிவுகளைத் தரும். இது அவற்றை ஆபத்தானதாக மாற்றுகிறது.

கோட் எழுதுவது எளிது. ப்ரொடக்ஷன்-ரெடி (production-ready) கோட் எழுதுவதற்கு விஷயங்கள் எவ்வாறு தோல்வியடைகின்றன என்பதைப் புரிந்துகொள்வது அவசியம்.

முழு வழிகாட்டியை இங்கே படிக்கவும்: https://dev.to/bikkisingh/10-php-bugs-that-break-real-projects-and-how-to-fix-them-part-2-7hm