|
Dit artikel is de uitbreiding van het artikel "paginasysteem in php". Er wordt uitgelegd hoe je een script maakt waarmee je alle pagina's uitomatisch kan indexeren.
Uitbreiding Het zou echter nog handiger zijn als je je ook niks moest aantrekken van die lijst met pagina's in je index.php. Stel je voor dat je een website hebt van 500 pagina's; dat zou dan betekenen dat je een lijst zou moeten invoeren van 500 pagina's! Gelukkig kunnen we ons script nog gaan optimaliseren zodat dit niet hoeft. De code om alle pagina's automatisch te indexeren ziet er zo uit: <?php // laden van bestanden if (is_file($load . ".php")) { include($load . ".php"); } // laden van errorpagina else { include("errors/fout404.php"); } ?> Vervang deze code dus door je handmatig ingevoerde lijst van pagina's. We hebben nu nog één probleempje: alle pagina's die je gaat opvragen zoekt het script in de rootdirectory van je website. Als je veel pagina's hebt, staan sommige pagina's ook in mappen. Ook dat is op te lossen. Je breidt het script dan uit met de namen van de mappen die je hebt. De volledige code ter vervanging van je inhoud in index.php ziet er uiteindelijk zo uit: <?php if(!isset($_GET['load'])) { $load = "home"; } else { $load = $_GET['load']; } // laden van bestanden in rootdirectory if (is_file($load . ".php")) { include($load . ".php"); } // laden van bestanden in mappen elseif(is_file("artikels/" . $load . ".php")) { include("artikels/" . $load . ".php"); } elseif(is_file("cursussen/" . $load . ".php")) { include("cursussen/" . $load . ".php"); } // laden van index-bestanden in mappen elseif($load == "artikels") { include "artikels/index.php"; } elseif($load == "cursussen") { include "cursussen/index.php"; } // laden van errorpagina else { include("errors/fout404.php"); } ?> De code om mappen en index-bestanden in mappen in te laden kun je eventueel ook weglaten om je code korter te maken. Als je dan een pagina wilt oproepen die zich in een map bevindt, geef je achter ?load= ook de map mee: - http://www.website.be/?load=artikelen/artikel1 voor het bestand artikel1.php dat zich in de map artikels bevindt.
- http://www.website.be/?load=artikelen/index voor het bestand index.php dat zich in de map artikels bevindt.
Afwerking Nadeel aan deze methode is de verschillende locatie van afbeeldingen en andere documenten. Je moet nu steeds een link leggen vanuit je rootdirectory. Stel dat je een map artikels hebt met daarin het bestand artikel1.php en een afbeelding afb_1.jpg. Vroeger zou je in het bestand artikel1.php op de volgende manier een link gelegd hebben naar de afbeelding: <img src="afb_1.jpg"> Aangezien het bestand en de afbeelding in dezelfde map zitten, werkte dit perfect. Het PHP-systeem bevindt zich echter in index.php; aangezien dit bestand zich in de rootdirectory bevindt, zullen we onze linken ook vandaar uit moeten leggen. Dezelfde link wordt dan: <img src="artikels/afb_1.jpg"> Nadat je dit overal hebt aangepast, heb je je eigen paginasysteem in PHP! Linken leggen naar pagina's gebeurt nu gewoon zo: <a href="?load=artikel1">ga naar artikel 1</a> Beveiliging Over de (on)veiligheid van dit systeem is al menig boompje opgezet. Het zou uiterst gevaarlijk zijn om pagina's te includen op deze manier omdat iemand een vijandig PHP-script op een andere server simpelweg kan includen in jouw website. Verder kan iemand de rechtstreekse PHP-pagina opvragen (de eigenlijke include dus) en opent die zo een pagina zonder omringende lay-out. Dit kunnen we ondervangen met onderstaande code te plaatsen in elke include: <?php // Belangrijk: zet geen spaties e.d. boven deze php-tag om geen headers te versturen if(!$_GET['load']) { header("Location: http://". $_SERVER['SERVER_NAME'] . "/?load=".substr(strrchr($_SERVER['SCRIPT_NAME'], "/"), 1, -4).""); } ?> Iemand die nu de rechtstreekse PHP-pagina opvraagt (bijvoorbeeld pagina.php), wordt automatisch omgeleid naar de juiste locatie in de vorm van ?load=pagina .
|