𝗧𝗼𝗽 𝟭𝟬 𝗣𝗛𝗣 𝗕𝘂𝗴𝘀 𝗘𝘃𝗲𝗿𝘆 𝗕𝗲𝗴𝗶𝗻𝗻𝗲𝗿 𝗠𝗮𝗸𝗲𝘀
നിങ്ങൾ കോഡ് എഴുതുന്നു. റിഫ്രഷ് ബട്ടൺ അമർത്തുന്നു. പക്ഷേ ഒരു വെളുത്ത സ്ക്രീൻ മാത്രം കാണുന്നു.
ഡിഫോൾട്ട് ആയി PHP പിശകുകൾ (errors) കാണിക്കാതെയാണ് പ്രവർത്തിക്കുന്നത് എന്നതുകൊണ്ടാണ് ഇത് സംഭവിക്കുന്നത്. ഡെവലപ്മെന്റ് സമയത്ത് പിശകുകൾ കാണിക്കാൻ നിങ്ങൾ നിർബന്ധമായും ചെയ്യേണ്ടതുണ്ട്.
നിങ്ങളുടെ ഫയലുകളുടെ മുകളിൽ ഈ വരികൾ ചേർക്കുക:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
ഇത് പ്രൊഡക്ഷനിൽ (production) ഉപയോഗിക്കരുത്. പകരം ഫയൽ ലോഗുകൾ (file logs) ഉപയോഗിക്കുക.
സാധാരണയായി സംഭവിക്കുന്ന 10 തെറ്റുകളും അവ എങ്ങനെ പരിഹരിക്കാം എന്നതും താഴെ നൽകുന്നു:
സെമി കോളനുകൾ വിട്ടുപോവുക (Missing Semicolons) ഒരു സെമി കോളൺ മറന്നുപോയാൽ PHP പ്രവർത്തിക്കുന്നത് നിൽക്കും. ഇത് പലപ്പോഴും പിശകുകൾ കാണിക്കാതെ തന്നെ പ്രോഗ്രാം ക്രാഷ് ആകാൻ കാരണമാകും. പരിഹാരം: ഓരോ സ്റ്റേറ്റ്മെന്റും (statement) സെമി കോളനിൽ അവസാനിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക.
ലൂസ് കമ്പാരിസൺ (Loose Comparison (== vs ===)) ഡബിൾ ഈക്വൽ ചിഹ്നം ടൈപ്പ് കോർഷൻ (type coercion) നടത്തുന്നു. ഇത് ലോജിക് പിശകുകൾക്ക് കാരണമാകും. പരിഹാരം: ട്രിപ്പിൾ ഈക്വൽ (===) ഉപയോഗിക്കുക. ഇത് വാല്യൂവും (value) ടൈപ്പും (type) പരിശോധിക്കുന്നു.
അൺഡിഫൈൻഡ് വേരിയബിളുകൾ (Undefined Variables) ഒരു വേരിയബിൾ അസൈൻ ചെയ്യുന്നതിന് മുമ്പ് അത് ഉപയോഗിക്കുന്നത് നിങ്ങളുടെ ലോജിക് തെറ്റിക്കും. പരിഹാരം: null coalescing operator ഉപയോഗിക്കുക. ഉദാഹരണം:
$name = $_GET['name'] ?? 'Guest';ഗ്ലോബൽ വേരിയബിൾ സ്കോപ്പ് (Global Variable Scope) ഫങ്ക്ഷനുകൾക്ക് പുറത്തുള്ള വേരിയബിളുകളെ ഫങ്ക്ഷനുകൾക്ക് കാണാൻ കഴിയില്ല. പരിഹാരം: വേരിയബിളുകളെ പാരാമീറ്ററുകളായി (parameters) ഫങ്ക്ഷനുകളിലേക്ക് പാസ്സ് ചെയ്യുക.
SQL ഇൻജക്ഷൻ (SQL Injection) യൂസർ ഇൻപുട്ട് ഉപയോഗിച്ച് ക്വറികൾ (queries) നിർമ്മിക്കുന്നത് ഹാക്കർമാർക്ക് ഡാറ്റ മോഷ്ടിക്കാൻ അവസരം നൽകുന്നു. പരിഹാരം: പ്ലേസ്ഹോൾഡറുകൾ (placeholders) ഉപയോഗിച്ചുള്ള prepared statements ഉപയോഗിക്കുക (?).
ക്രോസ്-സൈറ്റ് സ്ക്രിപ്റ്റിംഗ് (Cross-Site Scripting (XSS)) യൂസർ ഇൻപുട്ട് നേരിട്ട് പ്രിന്റ് ചെയ്യുന്നത് ബ്രൗസറുകളിൽ മാലീഷ്യസ് സ്ക്രിപ്റ്റുകൾ (malicious scripts) പ്രവർത്തിക്കാൻ കാരണമാകും. പരിഹാരം: ഔട്ട്പുട്ട്
htmlspecialchars()ഉപയോഗിച്ച് എൻക്രോസ് ചെയ്യുക.ഹെഡേഴ്സ് ഓൾറെഡി സെന്റ് (Headers Already Sent) ബ്രൗസറിലേക്ക് ഇതിനകം ടെക്സ്റ്റ് അയച്ചു കഴിഞ്ഞാൽ നിങ്ങൾക്ക് ഒരു യൂസറെ റീഡയറക്ട് (redirect) ചെയ്യാൻ കഴിയില്ല. ഒരു ചെറിയ സ്പേസ് പോലും ഈ പിശകിന് കാരണമാകും. പരിഹാരം:
header()കോളുകൾ ഫയലിന്റെ ഏറ്റവും മുകളിൽ നൽകുക. റീഡയറക്റ്റിന് ശേഷം എപ്പോഴുംexit()ഉപയോഗിക്കുക.അൺഡിഫൈൻഡ് അറേ കീസ് (Undefined Array Keys) നിലവിലില്ലാത്ത ഒരു ഫോം കീ (form key) ആക്സസ് ചെയ്യുന്നത് വാർണിംഗുകൾക്ക് കാരണമാകും. പരിഹാരം: എല്ലാ
$_POST,$_GETഡാറ്റകൾക്കും null coalescing operator ഉപയോഗിക്കുക.Include vs Require ഒരു ഫയൽ കാണാതിരുന്നാൽ
includeഒരു വാർണിംഗ് മാത്രമേ കാണിക്കൂ. സ്ക്രിപ്റ്റ് തുടർന്നും പ്രവർത്തിക്കുകയും പിന്നീട് ക്രാഷ് ആകുകയും ചെയ്യും. പരിഹാരം: ഡാറ്റാബേസ് കണക്ഷനുകൾ പോലുള്ള നിർണ്ണായക ഫയലുകൾക്കായിrequire_onceഉപയോഗിക്കുക.അൺചെക്ക്ഡ് റിട്ടേൺ വാല്യൂസ് (Unchecked Return Values) പല PHP ഫങ്ക്ഷനുകളും പരാജയപ്പെടുമ്പോൾ
falseറിട്ടേൺ ചെയ്യുന്നു. ആ റിസൾട്ട് ഉടൻ തന്നെ ഉപയോഗിച്ചാൽ കൂടുതൽ പിശകുകൾ ഉണ്ടാകും. പരിഹാരം: റിസൾട്ട് ഉപയോഗിക്കുന്നതിന് മുമ്പ് അത്falseആണോ എന്ന് പരിശോധിക്കുക.
വിജയത്തിനായുള്ള സംഗ്രഹം:
- ഡെവലപ്മെന്റ് സമയത്ത് എറർ റിപ്പോർട്ടിംഗ് ഓൺ ചെയ്യുക.
- എല്ലാ കമ്പാരിസണുകൾക്കും === ഉപയോഗിക്കുക.
- എല്ലാ യൂസർ ഇൻപുട്ടുകളും സാനിറ്റൈസ് (sanitize) ചെയ്യുക.
- റിട്ടേൺ വാല്യൂസ് പരിശോധിക്കുക.
സ്രോതസ്സ്: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh