<?php if(!isset($_GET["sivu"])) { $sivu = "etusivu"; } else { $sivu = $_GET["sivu"]; } if(!file_exists($sivu . ".php")) { $sivu = "error"; } include($sivu . ".php"); ?>
Voisiko joku viisaampi kertoa, piileekö tässä jokin tietoturva- aukko?
Minä poistaisin ainakin replacella kaikki pisteet ja kauttamerkit, ettei palvelimelta/sivutilalta voitaisi liittää mitä tahansa PHP-sivua.
Voisit myös estää sivua lataamasta itseään.
Tosin, jos muutenkin teet kaikki erillisinä PHP-sivuina ja käytät yhtä keskitettyä sivua saadaksesi nätimmät urlit, niin voisit sen sijaan harkita sitä, että teet hakemistoja ja pönkkäät sinne sivut index.php:na. Saat todella nätit urlit ja vaiva on samaa luokkaa kuin sen kanssa mitä nyt teet.
Pieni selvennys, eli tänään tutustun ensimmäisen kerran PHP:n ihmeelliseen maailmaan. Hakukoneilla olen etsinyt apua dynaamisten sivujen luontiin ja päädyin tuohon vaihtoehtoon.
Merri kirjoitti:
Tosin, jos muutenkin teet kaikki erillisinä PHP-sivuina ja käytät yhtä keskitettyä sivua saadaksesi nätimmät urlit, niin voisit sen sijaan harkita sitä, että teet hakemistoja ja pönkkäät sinne sivut index.php:na. Saat todella nätit urlit ja vaiva on samaa luokkaa kuin sen kanssa mitä nyt teet.
Kävin tutustumassa tuohon sivustoosi, ilmeisesti itse käytät mainitsemaasi toteutustapaa. Jos haluat muuttaa linkkejä, joudutko tekemään muutokset jokaiseen index.php- tiedostoon?
Tarkoitatko sivupaneelia/valikkoa? Ei tarvitse, minulla on erillinen template.php jossa on sivun header ja footer. Elikkä koodini on tätä luokkaa:
<?php require_once('./template.php'); generate_header('Sivun nimi'); ?> <h1>Tähän tulee sivun normaali sisältö</h1> <p>Jee.</p> <?php generate_footer(); ?>
<?php function generate_header($title) { // aloita sivun pakkaaminen ob_start('ob_gzhandler'); ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <?php if ($title == '') { echo ' <title>Sivuston nimi</title>'; } else { echo ' <title>'.$title.' – Sivuston nimi</title>'; } ?> </head> <body> <?php } function generate_footer() { ?> </body> </html><?php // lähetä sivu ob_end_flush(); } ?>
Yksinkertaistin tuota aika rankasti. Jokatapauksessa kaikki sivut toimivat saman ulkoasupohjan kautta.
Kiitokset tuosta, sovelsin sitä omalle sivustolleni. Yhteen ongelmaan kuitenkin törmäsin.
Esimerkiksi kansion Valokuvat sisällä oleva index.php ei suostu hakemaan tuota template.php:tä. Toimii kyllä silloin, kun index.php ja template.php sijaitsevat samassa kansiossa.
<?php require_once('./template.php'); generate_header('Valokuvat'); ?>
Tähän on jokin lapsellisen helppo ratkaisu, mutta itse en sitä millään keksi.
EDIT
Lapsellisen helppoa. Template.php:n linkki erilliseen tyylitiedostoon piti muuttaa oikeanlaiseksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.