ඔබ තවමත් Widane Forums සාමාජිකයෙක් නෙවෙයි ද..?

Widane Forums හි සියළුම ලිපිවල ඇති සියළුම Links වෙත පිවිසීමට නම් ලියාපදිංචිවීම අනිවාර්යයි.
ඔබගේ සියලුම තාක්ෂණික ගැටළු සඳහා විසඳුම් සොගැනීමට වගේම දැනුම බෙදාගැනීම සඳහා මෙහි ඉඩකඩ වෙන්කර තිබෙනවා.
ඉතින් ඇයි තවත් බලාගෙන ඉන්නේ ඉක්මනින් ලියාපදිංචිවී ඔබගේ දැනුම වැඩිකරගන්න.

Register Here




[Tut] Building a blog in PHP [2nd tute] | URL routing
#1
Lightbulb 
කලින් ටියුට් එකෙන් අපි පට ගත්තා වලින් බ්ලොග් එකක් හදන්න. මේකෙන් අපි මුල්ම ස්ටෙප් එක ගැන බලන්න යන්නේ.

ඉස්සෙල්ලම මන් කරන්න යන්නේ URL routing mechanism  එක හදන්න. ඒ කියන්නෙ මේ වගේ දෙයක්.


අපි එන්ටර් කරන එක අනුව අපිට එකින් එකට වෙනස් පේජ් ඩිස්ප්ලේ වෙන්න හදන එක. උදාහරනයක් විදිහට මන්   blog-url.com/about-us  කියල එන්ටර් කරොත් බ්‍රවුසර් එකේ අපිට අපේ බ්ලොග් එකේ about-us පේජ් එක view වෙන්න ඕනේ .  blog-url.com/contact-us කියල එන්ටර් කරොත් බ්ලොග් එකේ contact-us පේජ් එක view වෙන්න ඕනේ . අපි හිතමු අපේ සයිට් එකේ ආර්ටිකල් එකක් තියෙනවා කියලා remote-command-execution නමින්. එතකොට අපි blog-url.com/remote-command-execution කියල එන්ටර් කරොත් ඒ ආර්ටිකල් එක view වෙන්න ඕනේ. Tongue

ඉතින් අපි කොහොමද මේ වගේ එකක් හදන්නේ? . එක විදිහක් තමා හැම පේජ් එකකටම php ෆයිල් එක ගානෙ හදන එක.උදාහරණයක් විදිහට , about-us කියන පේජ් එක වෙනුවට අපි about-us.php කියල ෆයිල් එකකුත් contact-us කියන පේජ් එකට අදාලව contacr-us.php කියල ෆයිල් එක්කුත් හදනවා . දැන් යූසර් about-us පේජ් එක ඉල්ලුවොත් අපි එයාව redirect කරනවා about-us.php ෆයිල් එකට. ඔයාලට තේරෙයි මේ ක්‍රමය ඒතරම් ප්‍රායෝගික නෑ කියලා. අපි හිතමු අපේ සයිට් එකේ පිටු 20 ක් තියෙනව කියලා , ඉතින් අපිට php ෆයිල් 20 ක් හදන්න වෙනවා haha . ඒක කොහොමහරි කරා කියමුකෝ. අපි සයිට් එකට ආර්ටිකල් දන්න දන්න අර්ටිකල් ආන වැඩි වෙනවා. ඒ හැම වෙලේම අපිට අලුත් php ෆයිල් එකක් හදන්න වෙනවා.

මේ ප්‍රශ්නෙට ලේසිම හා හොඳම විසඳුම තමා htacces ෆයිල් එකක් යූස් කරන එක. අපි බලමු මේක කරන්නේ කොහොමද කියලා.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.*)$ router.php?slug=$1 [QSA,L]

මන් පැහැදිලි කරන්නම් මෙතන වෙන දේ.

RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]

ඔය කෝඩ් කොටස් දෙකෙන් වෙන්නේ යූසර් ඉල්ලන්නේ ෆයිල් එකක් හරි ෆෝල්ඩර් එකක් නම් ඒක නොර්මල් විදිහට කරන එක. උදාහරණයක් විදිහට යූසර්  sunny_leone_hot.jpg කියන ෆයිල් එක  Big Grin Big Grin ඉල්ලනවානම් අපි සාමාන්‍ය විදිහට ඒක දෙන එක.
RewriteRule ^(.*)$ router.php?slug=$1 [QSA,L]
ඔය කොටස තමා අපේ බ්ලොග් එකේ වැදගත්ම පාර්ට් එක. මේකෙන් වෙන්නෙ user request එකේ තියෙන slug කොටස router.php කියන ෆයිල්  එකට parameter එකක් විදිහට දෙන එක. උදාහරණයක් විදිහට මේ url එක ගන්නකෝ.
blog-url.com/about-us
ඔය එක අපේ blog එකට ආවම ඒකෙ "blog-url.com/" කියන කොටස ඇර ඉතුරු පාර්ට් එක (about-us) අපේ
router.php කියන file එකට යවනවා. ඇත්තටම මෙතෙන්දි වෙන්නෙ GET parameter එකක් දෙන එක.
router.php?slug=about-us
වගේ.දැන් අපිට router.php ෆයිල් එකේදි php කෝඩ් එකක් යූස් කරලා මේ parameter එක ඇරගෙන අවශ්‍ය විදිහට ඩිස්ප්ලේ එක හදාගන්න පුලුවන්. Smile අපි තව දුරටත් හිතමු යූසර් එන්ටර් කරන එක මේ වගේ කියලා.

blog-url.com/anti-debugging-techniques
මේක පේජ් එකක් නෙවෙයි එකක්. දැන් අපි කලින් වගේම ෆයිල් එකේදි අර slug කියන GET parameter එක ඇරගෙන බලනවා මේ කියන විදිහේ පෝස්ට් එකක් අපි ගාව තියෙනවද කියලා. එහෙම එකක් තියෙනවනම් අපි ඒ අදාල පෝස්ට් එක ඩිස්ප්ලේ කරනවා. නත්නම් 404 එරර් එකක් ඩිස්ප්ලේ කරනවා. Smile 

මුලින්ම අපි බලමු අපේ ෆයිල් එක හරියට වැඩ කරනවද කියලා. ඔයාලත් අර වගේ ෆයිල් එකක් හදලා අපි අර කලින් හදපු ෆෝල්ඩර් එක ඇතුලට දාන්න ඕනෙ. ඊළගට කියා ෆයිල් එකකුත් ඒ ෆෝල්ඩර් එකේම හදන්න. දැන් කියන ෆයිල් එකෙ පල්ලෙහා තියෙන කෝඩ් එක දාල ටෙස්ට් කරලා බලන්න අපේ මූලික පියවර හරිද කියලා.

<?php
$slug = $_GET['slug'];
echo $slug;  /*this code is vulnerble for xss. only for testing*/
?>

දැන්  XAMP/WAMP එක ඔන් කරලා ඔයාගෙ බ්‍රවුසර් එකෙන් ඔයා හදපු බ්ලොග් එක විසිට් කරන්න. ඔයා working folder එකට දාපු නම blog කියලා හිතුවොත් මේ  ඇඩ්‍රස් එක ගහල බලන්න. 127.0.0.1/blog/just-for-testing.

දැන් ඔයා ඔය ගහපු string එක (just-for-testing) echoවෙනවනම් මේ කරපු ස්ටෙප් එක හරියට කරලා තියෙනවා. මොකක් හරි ප්‍රශ්නයක් ආවොත් කමෙන්ට් එකක් දාන්න.


දැන් අපි බලමු අපේ ඇත්තම router.php කියන ෆයිල් එකේ php කෝඩ් එක මොන වගේ වෙන්න ඕනෙද කියලා.

මේකෙදි අපේ වෙබ් ඇප්ලිකේශන් එකේ ආරක්ශාවට අපි දේවල් ටිකක් කරන්න ඕනෙ. මුලින්ම අපි බලනවා router.php ෆයිල් එකට GET parameter එකක් දීල තියෙනවද කියලා. මොකද අපිට slug parameter එක නැතුව හරියට පේජ් එක ඩිස්ප්ලේ කරන්න බැරි හින්දා. අපිට GET parameter එක දීල නැත්නම් අපි යූසර්ව index.php එකට redirect කරල යවනවා.


if (!isset($_GET['slug'])) {
header('location:index.php');
}

උඩ පියවරෙන් පස්සෙ අපි දන්නවා slug කියන parameter එක දිල තියෙනව කියලා. දැන් අපිට ඒක ගන්න පුලුවන්.


$slug = htmlspecialchars($_GET['slug']);
$slug = trim($slug);

htmlspecialchars කියන php function එකෙන් අපේ slug parameter එකේ තියෙර්න අනවශ්‍ය කොටස් අයින් කරලා දානවා.trim function එකෙන් අපි අනවශ්‍ය ඉඩ (spaces) තියෙනවානම් ඒවත් අයින් කරල සුද්ද කරල ගන්න එක තමා කරන්නේ. ඇත්තටම අපේ යූසර් හොඳ කෙනෙක්නම් ඉතින් ඔය වගේ ෆිල්ටර් ඕනෙ වෙන්නෙ නෑ. Big Grin Big Grin
ඒත් කෝකටත් හොඳයිනේ මේ වගේ security filters යූස් කරන එක.

හරි ඊළගට බලමු අපි මේ විදිහේ කෝඩ් එකක් යූස් කරොත් මොකද වෙන්නේ.

$page = $slug . '.php';
include(pages/$page);
මේකෙන් අපිට ඕනෙ වැඩේනම් හරියටම වෙනවා. ඒත් හරියට බැලුවොත්  ඔයාලට පෙනෙයි මේක  Local file inclussion [LFI] වලට vulnerble  කියලා.

අනිත් ප්‍රශ්නෙ තමා මෙතනදි අපිට යූසර් ඉල්ලන්නෙ පේජ් එකක්ද එහෙම නැත්නම් ආර්ටිකල් එකක්ද කියන එක වෙන වෙනම හොයාගන්නත් බැරි වෙනවා. ඔය ප්‍රශ්න ඔක්කොටම විසඳුම විදිහට පල්ලෙහා තියෙන කෝඩ් එක අපිට යූස් කරන්න පුලුවන්.

$pages =  array('about-us', 'contact-us', 'members');

if (strlen($slug)>200) {
show_404();
exit();

}else if (in_array($slug, $pages)) {
show_page($slug);
exit();

}else if (get_single_post($slug)) {
show_post($slug);
exit();

}else{
show_404();
exit();
}

මුලින්ම page කියලා array එකක් හදලා අපිට ඕනෙ පේජ් ටික ඒකට දානවා. ඊළඟට  if statement ටිකක් දාල එක එක එක conditions යටතෙ ගැලපෙන විදිහට ඩිස්ප්ලේ කරනවා.

එකීදි මුලින්ම චෙක් කරන්නේ එක 200 char වලට වඩා දිගයිද කියලා. මොකද සාමන්ය යූසර් කෙනෙක් ගෙන් එච්චර දිග request එකක් එන්නෙ නෑ. Angry Angry ඒක හින්දා එහෙම ගොඩක් දිග request එකක් එනවා කියන්නෙ අපි ආයෙ ඒක චෙක් කරන්න මහන්සි වෙන්නෙ නෑ 404 එරර් එකක් ඩිස්ප්ලේ කරනවා. 

ඊළගට අපි චෙක් කරනවා යූසර් ඉල්ලන්නේ page එකක්ද කියලා. මේකට අපි යූස් කරන්නෙ in_array() කියන function එක.

හරි. යූසර්ට ඕනෙ පේජ් එකක් නෙවෙයිනම් අපි බලනවා යූසර් ඉල්ලන විදිහේ ආර්ටිකල් එකක් අපි ගාව තියෙනවද කියලා. මේකට අපි පාවිච්චි කරන්නේ get_single_post කියන function එක.

අන්තිමේට ඔය කියනවිදිහේ එකක්වත් නැත්නම් අපි 404 error එක ඩිස්ප්ලේ කරවනවා.

මේකෙදි අපි පාවිච්චි කරපු get_single_post(), show_page(),show_404() වගේ ෆන්ශන් අපි ලියන්න ඕනෙ ඒවා ඊළග ටියුට් එකෙන් මන් කියන්නම් ඒ ටික ලියලා අපේ එක කරන විදිහ. Shy

Thank you for reading. Smile Smile
B.Sc Engineering Student
gov. university of Pera.
Admin At

[To see links please login or register here]

1
1
1
1
#2
Ela thawa one
Reply
#3
Quote:Machan anith tikak danno ela bn
Reply
#4
කියපු ගොඩක් ඒවා තේරුනේ නෑ. සමහර විට මට PHP දැනුම නැති නිසාද දන්නේ නෑ..
anyway, දිගටම ලියමු.
මම php ටිකක් ඉගෙන ගෙන මේක ට්‍රයි කරන්නම්.. Smile Wink
<>
.:: [Induwara Uthsara] :: [රතු කුරුල්ලා] ::.
</>
Reply
#5
(10-18-2019, 03:08 PM)Induwara Uthsara Wrote: කියපු ගොඩක් ඒවා තේරුනේ නෑ. සමහර විට මට PHP දැනුම නැති නිසාද දන්නේ නෑ..
anyway, දිගටම ලියමු.
මම php ටිකක් ඉගෙන ගෙන මේක ට්‍රයි කරන්නම්.. Smile  Wink

ela. ilaga ewa puluvan tharam simple liyanna balannam.unclear thanak thibboth ahapn. Big Grin Big Grin
B.Sc Engineering Student
gov. university of Pera.
Admin At

[To see links please login or register here]

Reply
#6
(10-19-2019, 11:22 AM)ph03n1x Wrote: ela. ilaga ewa puluvan tharam simple liyanna balannam.unclear thanak thibboth ahapn. Big Grin Big Grin

haa.. mekenam godak ewa therune na.. Sad
<>
.:: [Induwara Uthsara] :: [රතු කුරුල්ලා] ::.
</>
Reply
#7
(10-19-2019, 12:06 PM)Induwara Uthsara Wrote: haa.. mekenam godak ewa therune na..  Sad
 mekenam loku deyak ne. ilaga tut wala thama object oriented php thiyenne. Smile
B.Sc Engineering Student
gov. university of Pera.
Admin At

[To see links please login or register here]

Reply
#8
Elama Wink
|+| Knowledge |+| Discipline |+| Patience |+|

Area Master 
(Founder & Info. Sec. Analyst)

Widane Forums
Contact Me: [email protected]
Admin Queries: [email protected]
General Queries:

[To see links please login or register here]

 
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
Lightbulb [Tut] Building a blog in PHP [1st tute] | Introduction ph03n1x 7 393 10-27-2019, 05:14 AM
Last Post: Area Master



Users browsing this thread: 1 Guest(s)