PDA

View Full Version : [PHP] problema percorsi assoluti


giancky80
25-10-2006, 09:52
Ciao scusate, ma sono ignorante in materia!
Il mio obiettivo è creare una pagina .php con header main e footer. Cliccando su un link deve cambiare solo il main.
Mi potete guidare passo passo?!?
Ho creato una pagina index.php nella directory principale del sito in cui c'è questo script php che mi permette di sostituire solo il contenuto centrale senza ricaricare header e footer:

<? include("header.php");
$p="main"; //pagina di default per i contenuti centrali
if(isset($_GET['page'])){ //pagina passata via parametro
$p=$_GET['page'];
if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
$p="error"; //pagina di errore
}
include($p.".php");
include("footer.php");
?>

I link all'interno dell'header (dov'è il menù di navigazione) sono di questo tipo:
<a href="index.php?page=contattaci">
e funzionano correttamente, ma per link che puntano a pagine in sottodirectory non so come fare... Per es ho il guestbook che è nella directory /guestbook/index.php

Se per es faccio un link di questo tipo:
<a href="index.php?page=/guestbook/index">
oppure
<a href="index.php?page=./guestbook/index">

mi viene sempre mostrata la pagina d'errore perchè non trova i file che gli ho chiesto di includere! In pratica non riconosce il percorso come l'ho scritto io...

Grazie

andbin
25-10-2006, 10:55
Se per es faccio un link di questo tipo:
<a href="index.php?page=/guestbook/index">
oppure
<a href="index.php?page=./guestbook/index">

mi viene sempre mostrata la pagina d'errore perchè non trova i file che gli ho chiesto di includere! In pratica non riconosce il percorso come l'ho scritto io...

GrazieBeh, il problema principale è che una richiesta di page come "/guestbook/index" va a cozzare con il test con il basename.

Posso consigliarti di fare così: i file che contengono i pezzi (perché non contengono header/footer) di pagina che devono essere inclusi in modo "dinamico", potresti metterli con una estensione particolare, es. ".part.php". A quel punto devi solo testare se il file esiste.
Cioè se ti viene richiesto "/guestbook/index", tu testi se esiste "/guestbook/index.part.php"

Nota che per comporre (e poi includere) il file, ti conviene usare la variabile $_SERVER['DOCUMENT_ROOT'] che contiene il path in locale che punta alla root del sito.

Quindi potresti fare una cosa del tipo (non l'ho testato ;) ):
$finc = $_SERVER['DOCUMENT_ROOT'] . "/error.php";

if (isset ($_GET['page']))
{
$ftest = $_SERVER['DOCUMENT_ROOT'] . $_GET['page'] . ".part.php";

if (file_exists ($ftest))
$finc = $ftest;
}

include "$finc";