Örülök neki, de értelmesebb is lehetett volna.
PHP weboldal motor
Írta: Tupacko | 2007. augusztus 23. | kategóriák: Biztonság, Fejlesztés, PHP, ProgramozásA php rugalmasságának hála, könyedén tudunk készíteni egy motort az oldalunkank. Több változat is nagyon elterjedt, így mi kettőről is szót ejtünk. Sok oldalon láthatjuk, hogy minden link az indexre mutat hasonló képpen: index.php?module=valami Az elépzelés nagyon jó, viszont a probléma a megvalósításnál van (sok esetben).
A kezdő webmesterek nem nagyon törödnek a biztonsággal vagy éppen csak nem gondolnak arra, hogy nagy bajt is okozhatnak a helytelenűl elkészített oldalbetöltő scripttel. Így példáúl egy elterjedt, de hibás változat a következő:
1 2 3 | if ( isset($_GET["module"]) ){ include $_GET["module"]."php"; } |
A módszeren több hiba is van. Kezdjük ott, hogyha nem adunk meg module változót, akkor hibát kapunk, nincs amit beolvasson a script. A veszélyes dolog viszont az, hogy ellenőrzés nélkül, bármilyen állományt beolvashatunk, mert nincsen ellenőrízve az elérési út. A megoldás abban áll, hogy a látható oldalakat egy tömbben tároljuk és csak akkor olvassuk be az oldalt, hogyha az létezik, jogunk van hozzá és a kiválasztott oldal. A megoldás egyik formája:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | $modules["lap1"] = "elsolap.html"; $modules["lap2"] = "jolerzemmagam.php"; $act = "main.php"; //az alap betoltes, ha nincs megadva a module valtozo if ( !isset($_GET["module"]) ){ $get_mod = ""; } else $get_mod = strip_tags(htmlentities($_GET["module"])); foreach($modules as $mod => $act_m){ if( strcmp($mod,$get_mod) == 0 ){ $act = $act_m; break; } } if ( file_exists($act) ){ include $act; } else{ echo "Az oldal nem található."; /** * vagy beolvashatsz egy sajat hibaoldalt is, ha azt irod, hogy * inlude "hibaoldal.php"; * */ } |
A php kódot a dokumentumunkazon részén kell elhelyezzük, ahova az állományokat olvassuk be. Ha csak tartalmat olvasunk, akkor érdemes az oldal tartalmi részénél elhelyezni, példáúl a content divben, vagy a táblázat középső oszlopában.
1 2 3 4 5 6 7 8 | ... <table><tbody> <tr> <td>menu</td> <td>tartalom (ide a php)</td> </tr> </tbody></table> ... |
Fontos megfigyelni, hogy ami az index.php-ban bennevan, az statikus, minden oldalon ott lesz. Csak az a tartalom változik, ahová a php motor olvassa be azt.
én úgy intézem ezt el, hogy a linkeket is egy többől íratomki, így van egy tömböm:
$menu = array( ‘Főoldal’ => ‘news’,
‘Cikkek’ => ‘articles’,
‘Vendégkönyv’ => ‘guestbook’,
‘Linkek’ => ‘links’,
‘Hiba jelentés’ => ‘error’ );
van egy kiírató kódom mondjuk:
foreach( $menu as $key => $value ){
print “\t“.$key.”\n\t\t\t”;
}
és van ugye, ami behúzza a megfelelő tartalmat, a megfelelő helyre ami lényegében ugyan az mint a tied:
$act_m ) {
if ( strcmp( $act_m, $get_mod ) == 0 ) {
$act = $act_m;
break;
}
}
if ( file_exists( “modul/”.$act.”.php” ) ) {
require_once( “modul/”.$act.”.php” );
}
else {
print “Error 404: Az oldal nem található, vagy nem vagy jogosult, a használatára!”;
Van olyan plugin vagy beállítási lehetőség a WordPress-ben, hogy ugyanúgy lehessen megjeleníteni az oldalamat, mint neked?
Tehát hogy ízelítőt ad a cikkekből, és odabiggyeszti az “Elolvasom a többi belegyzést” vagy hasonlót.
Az alap betöltés ha nincs megadva module változó..ez mit takar?
mind1, beírtam oda h index.php…lap1,lap2-hoz beírtam az oldalakat..hogy hívjam? simán
hozzzá szóltam