• Super User

    [PILLOLA] Inclusione ricorsiva di pagine in una Directory

    Volevo sottoporre questa mini guida per l'inclusione di pagine attraverso uno scriptino in php a mio parere molto pratico.
    Nella parte iniziale si tratta di settare le directory da cui si vuole attingere per prelevare le pagine da includere, si setta la pagina da includere di default (in questo caso home.php) e poi si puo' creare la pagina d'errore in caso quella da includere non esiste o non viene trovata.
    Il passo sucessivo e' l'inserimento per ogni directori da trattare del rispettivo prefisso da inserire nei vari link: in questo caso avremo che le pagine da includere dalla dir images avranno il prefisso img e quindi il link sara' del tipo 'http://www.dominio.com/index.php?img=index_della_dir_images (senza il suffisso php)

    Questo script viene salvato in un file per es scriptino.php e bastera' includerlo nell' index del nostro sito.

    Si possono cmq includere quante dir volete anche se in questo esempio ne trattiamao solo 2.

    Viene da se che bisognera' adottare il rewrite del link per farsi amici Google 😄

    Spero possa tornar utile a qualcuno questo mini-howto 🙂

    <?
    //
    /
    KHKServer /
    /
    ============================================ /
    /
    /
    /
    Copyright (c) 2005-2006 by Davide Tommasin - KHKServer /
    /
    http://www.khkserver.com - [email][email protected][/email] /
    /
    /
    /
    This program is free software. You can redistribute it and/or modify /
    /
    it under the terms of the GNU General Public License as published by /
    /
    the Free Software Foundation; either version 2 of the License. /
    /
    /

    // CONFIGURATION
    $dir1 = "images"; /* questa e' la prima dir dove si andranno a prelevare le pagine da includere /
    $dir2 = "public"; /
    questa e' la seconda dir dove si andranno a prelevare le pagine da includere */

    $mainpage = "home.php"; /* la pagina di default e' indicata qui /
    $fileext = ".php"; /
    l'estensione di default delle pagine web da includere */
    $error404 = "<h2>Error 404</h2>

    Could not find the requested page</p>"; /* Messaggio di errore per pagine non trovate */

    /* qui si puo' editare la stringa prima del '=' che comparira' nel link
    $cat1 = $_GET['img']; /* Esempio: http://www.dominio.com/index.php?img=myphoto /
    $cat2 = $_GET['pub']; /
    Esempio: http://www.dominio.com/index.php?pub=mydoc */
    // END OF CONFIGURATION

    // Se $cat1 (...img=...) e' nel link allora verra' usato questo ciclo:
    if (isset($cat1)) {
    $cat1 = stripslashes(strip_tags($cat1));
    $forbidden1 = ereg("../", $cat1);
    $forbidden2 = ereg("/", $cat1);
    $includepath= $dir1 . "/" . $cat1 . $fileext;

    if ($forbidden1 || $forbidden2) {
    	echo "<h2>Error</h2>";
    	echo "
    

    Could not include page. Only local files may be included</p>";
    }
    else {
    if (@fopen("$includepath", "r")) {
    include ("$includepath");
    }
    else {
    if (!(@fopen("$includepath", "r"))) {
    echo "$error404";
    }
    }
    }
    return;}

    // Se $cat2 (...pub=...) e' nel link allora verra' usato questo ciclo:
    if (isset($cat2)) {
    $cat2 = stripslashes(strip_tags($cat2));
    $forbidden1 = ereg("../", $cat2);
    $forbidden2 = ereg("/", $cat2);
    $includepath= $dir2 . "/" . $cat2 . $fileext;

    if ($forbidden1 || $forbidden2) {
    	echo "<h2>Error</h2>";
    	echo "
    

    Could not include page. Only local files may be included</p>";
    }
    else {
    if (@fopen("$includepath", "r")) {
    include ("$includepath");
    }
    else {
    if (!(@fopen("$includepath", "r"))) {
    echo "$error404";
    }
    }
    }
    return;}

    // If no category is defined in the URL:
    else {
    include ("$mainpage");
    }
    ?>


  • Super User

    Mmm... Mi sembra una buona guida, anche per chi ne sa anche un pò di php...
    L'unica cosa che non capisco è qui:

    
     if &#40;@fopen&#40;"$includepath", "r"&#41;&#41; &#123;
    include &#40;"$includepath"&#41;;
    &#125;
    else &#123;
    if &#40;!&#40;@fopen&#40;"$includepath", "r"&#41;&#41;&#41; &#123;
    echo "$error404";
    &#125;
    &#125;
    
    
    1. Per controllare se un file esiste, non c'è bisogno di aprire uno stream, puoi usare la funzione file_exists()
    2. Dopo l'else, non c'è bisogno di fare un'altro if, mi sembra alquanto inutile...
    3. Perchè usare ' "$includepath" ' anzichè ' $includepath ' senza doppi apici?

    Aggiunta nel thread in rilievo :8


  • Super User

    @PaTeR said:

    Mmm... Mi sembra una buona guida, anche per chi ne sa anche un pò di php...
    L'unica cosa che non capisco è qui:
    Sorry... prometto che non mi mettero mai piu alle 4 di mattina a scrivere codice :sbonk:

    Aggiunta nel thread in rilievo :8

    Grazie :yuppi:


  • Community Manager

    KING_Hack grazie per aver scritto la pillola 🙂


  • Super User

    @giorgiotave said:

    KING_Hack grazie per aver scritto la pillola 🙂

    E' stato un piacere... visto che di solito alle 4 di mattina (vedi post precedente) non so mai cosa fare 😄