PHP weboldal motor

Írta: | 2007. augusztus 23. | kategóriák: Biztonság, Fejlesztés, PHP, Programozás

A 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.



hozzzá szóltam

norbbie 2007. szeptember 2. - 10:46

Örülök neki, de értelmesebb is lehetett volna.

Avatar Tupacko
2007. szeptember 2.
11:04

kösz, ritka infohoz segitettel

Áron 2007. szeptember 2. - 20:29

é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!”;

scripter-man 2007. szeptember 7. - 18:04

Ez úton is megkérném a kedves látogatókat, hogy:

1. ha nincsen webolda, vagy nem azt írják be a weboldalnak szánt mezőbe, akkor inkább hagyják üresen
2. ilyesfajta nagy kódokat, a fórumban tessék, azért van 🙂

Hozzaszólások általában szöveges megjegyzéseknek vannak.
Amugy az ötlet jó, csak fölöslegesnek tartom, így bonyolítani 🙂 Szívesen látlak a fórumban is!

Avatar Tupacko
2007. szeptember 7.
18:35

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.

xy 2007. szeptember 8. - 12:50

Ez nem plugin, sablon fuggo, mit ir ki. A cikk torest a tag vegzi (termeszetesen a szokoz nelkul).

Avatar Tupacko
2007. szeptember 8.
17:17

és akkor h lehet linkel behívni az oldalt?

Aero95 2007. szeptember 8. - 23:54

nemszóltam:)

Aero95 2007. szeptember 9. - 00:21

🙂

Avatar Tupacko
2007. szeptember 9.
14:49

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

Aero95 2007. szeptember 11. - 20:21

…simán így: ?

Aero95 2007. szeptember 11. - 20:24

bocs, hogy ilyen sokat írok de nem akarja az igazát 😀

http://kepfeltoltes.pirateclub.hu/pics/likn.jpg

Aero95 2007. szeptember 11. - 20:24

A cikkhez fórumtéma nyílt:
http://forum.webpillango.org/index.php/topic,16.0.html
A továbbiakban ott történik a részletes ismertetés, eszmecsere.

Avatar Tupacko
2007. szeptember 11.
21:28