PHP பிழைகள் #21 முதல் #30 வரை: பொதுவான தவறுகள்

PHP எச்சரிக்கையின்றி நீங்கள் தவறுகளைச் செய்ய அனுமதிக்கிறது. பல நேரங்களில் பிழைகள் ஏற்பட்டாலும், அது தொடர்ந்து இயங்கிக்கொண்டே இருக்கும். இது தரவு சிதைவு (data corruption) அல்லது பாதுகாப்பு ஓட்டைகளுக்கு வழிவகுக்கும்.

தவிர்க்க வேண்டிய 10 முக்கியமான பிழைகள் இதோ:

  • மல்டிபைட் உரை (Multibyte Text) strlen() பைட்டுகளை (bytes) மட்டுமே கணக்கிடுகிறது, எழுத்துக்களை (characters) அல்ல. இது இந்தி அல்லது எமோஜி (emoji) உரைகளைச் சிதைக்கும். அதற்குப் பதிலாக mb_strlen() ஐப் பயன்படுத்தவும்.

  • சரிபார்க்கப்படாத API அழைப்புகள் (Unvalidated API Calls) file_get_contents() அமைதியாகத் தோல்வியடையக்கூடும். json_decode() என்பது null-ஐத் திருப்பித் தரலாம். பதில் false-ஆக உள்ளதா என்பதை எப்போதும் சரிபார்க்கவும் மற்றும் json_last_error() மூலம் சரிபார்க்கவும்.

  • தற்காலிக குக்கீகள் (Temporary Cookies) காலாவதி தேதி (expiry date) இல்லாமல் setcookie() பயன்படுத்தினால், பிரவுசரை மூடும்போது குக்கீ நீக்கப்படும். ஒரு காலாவதி நேரத்தை நிர்ணயிக்கவும் மற்றும் XSS தாக்குதல்களைத் தடுக்க httponly ஃபிளாக் (flag)-ஐப் பயன்படுத்தவும்.

  • பாதுகாப்பற்ற கோப்பு பதிவேற்றங்கள் (Unsafe File Uploads) கோப்பு நீட்சிகளை (file extensions) மட்டும் சரிபார்ப்பது போதுமானதல்ல. ஹேக்கர்கள் shell.php-ஐ shell.jpg என மறுபெயரிடுவார்கள். உண்மையான MIME வகையைச் சரிபார்க்க finfo_file() ஐப் பயன்படுத்தவும்.

  • வடிவமைக்கப்பட்ட சரங்களைக் கொண்டு கணிதச் செயல்பாடுகள் (Math with Formatted Strings) PHP கமா (comma) வரும் இடத்தில் எண்களைப் படிப்பதை நிறுத்திவிடும். "1,299.00" என்பது 1 ஆக மாறிவிடும். கணக்கிடுவதற்கு முன் str_replace() மூலம் கமாக்களை நீக்கவும். உங்கள் தரவுத்தளத்தில் (database) மூல எண்களைச் (raw numbers) சேமிக்கவும்.

  • பகிரப்பட்ட ஸ்டேடிக் பண்புகள் (Shared Static Properties) ஸ்டேடிக் பண்புகள் வகுப்பிற்கு (class) உரியவை, பொருளுக்கு (object) அல்ல. ஒவ்வொரு இன்ஸ்டன்ஸும் (instance) ஒரே தரவைப் பகிர்ந்து கொள்ளும். பயனர் சார்ந்த தரவுகளுக்கு வழக்கமான public properties-களைப் பயன்படுத்தவும்.

  • Exit இல்லாமல் ரீடைரக்ட்கள் (Redirects Without Exit) header("Location: ...") என்பது பிரவுசருக்கு ஒரு அறிவுறுத்தலை மட்டுமே அனுப்புகிறது. சர்வர் ஸ்கிரிப்டைத் தொடர்ந்து இயக்கிவிடும். ரீடைரக்ட் செய்த பிறகு எப்போதும் exit() ஐ அழைக்கவும்.

  • SQL இன்ஜெக்ஷன் (SQL Injection) வேரியபிள்களை (variables) நேரடியாக குயரி சரங்களில் (query strings) சேர்ப்பது, ஹேக்கர்கள் உங்கள் தரவுத்தளத்தைக் கட்டுப்படுத்த வழிவகுக்கும். PDO உடன் prepared statements-களைப் பயன்படுத்தவும்.

  • மெமரி கிராஷ்கள் (Memory Crashes) file_get_contents() முழு கோப்புகளையும் RAM-க்குள் ஏற்றுகிறது. இது பெரிய கோப்புகளின் போது உங்கள் சர்வரை முடக்கிவிடும் (crash). கோப்புகளை வரி வரியாகப் படிக்க fopen() மற்றும் fgets() ஐப் பயன்படுத்தவும்.

  • அமைதியான தரவுத்தளப் பிழைகள் (Silent Database Errors) PDO இயல்பாகவே அமைதியாக இருக்கும். பிழைகள் எக்ஸெப்ஷன்களைத் (exceptions) தூண்டுவதற்குப் பதிலாக false-ஐத் திருப்பித் தரும். PDO::ATTR_ERRMODE-ஐ PDO::ERRMODE_EXCEPTION-ஆக அமைக்கவும்.

தீர்வு எளிமையானது: தெளிவாக இருங்கள். ஒவ்வொரு ரிட்டர்ன் மதிப்பையும் (return value) சரிபார்க்கவும். ஒவ்வொரு உள்ளீட்டையும் (input) சரிபார்க்கவும். ஒரு செயல்பாடு (function) வேலை செய்துவிட்டது என்று ஒருபோதும் assumptions எடுக்க வேண்டாம்.

முழு கட்டுரை: https://dev.to/bikkisingh/php-bugs-21-to-30-common-mistakes-every-php-developer-must-knowpublished-5hbp