Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67

    Creazione semplice template php

    Sono alle prime prese con php e dopo aver usato solo poche funzioni e piccoli script, dovendo realizzare un nuovo sito web ho deciso di utilizzare un template in php.

    Ho 3 file:

    config.php

    Codice PHP:
    <?php
    //file di configurazione 
    $site 'http://ghea.it/'//url del sito web
    $email 'info@ghea.it';

    function 
    get_page() {//funzione per determinare pagina passata tramite get
        
    $page="home"//pagina di default per home
    if(isset($_GET['page'])){ //se il valore page, passato con get, esiste
        
    $page=$_GET['page'];
           }
        }

    ?>
    index.php
    codice:
    <?php include('config.php'); ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
    <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
    <title>Ghea</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
    <link href='http://fonts.googleapis.com/css?family=Droid+Sans' rel='stylesheet' type='text/css'>
        <title></title>
      </head>
      <body>
    <?php
    
    get_page();
    
     include ($page.".php");
    ?>
    
      </body>
    </html>
    E il file home.php che dovrebbe essere incluso quando richiedo la index.php senza valori tipo ?page=gggg

    Probabilmente l'errore è nella funzione personalizzata ma non lo riesco a trovare e niente viene incluso.

  2. #2
    Problemi nel tuo script:
    - lo scope delle variabili,
    - sicurezza include tramite $_GET[]

    le variabili definite all'interno di una funzione dovrebbero essere globali per accedervi dall'esterno, ma questa non è una strada consigliabile. Piuttosto aggiungi un return alla tua funzione.

    Prima di includere pagine attraverso variabili $_GET che appaiono nell'url, crea un array contenente i nomi delle pagine che vuoi possano essere incluse ed esegui un controllo.

  3. #3
    modifica la funzione così (leggi i commenti):

    Codice PHP:
    function get_page() 
        {
        
    //funzione per determinare pagina passata tramite get 
        
    $page="home"//pagina di default per home 
        
    if(isset($_GET['page']))
            { 
            
    //se il valore page, passato con get, esiste 
            
    $page=$_GET['page']; 
            
    $file_da_includere $page.'.php';
        
    /*
        qui dovranno esserci millemila controlli
        1) anzitutto file_exists() per verificare che il file che desideraimo includere esista
        */
            
    if(!file_exists($file_da_includere))
                {
                
    ob_start(); // non è opportuno utilizzarlo a tale scopo... ma vabbhè
                
    header("HTTP/1.0 404 Not Found"); // oppure redirect dove ti pare
                
    exit;
                }
        
    /*
        IMPORTANTISSIMO:
        occorre prestare molta attenzione con gli include dinamici
        ed effettuare gli opportuni controlli
        In particolare occorre impedire che l'utente manipolando la variabile GET 
        possa a suo piacimento eseguire inclusioni di file 'pericolosi' e/o 'riservati'
        NB: Sul web ci sono molte guide che non ponderano attentamente questo aspetto
        
        */
            
    }
        return 
    $page;
        } 
    Nella index.php
    Codice PHP:
    <?php
    $page 
    get_page();
    include (
    $page.".php");
    ?>
    Consiglio di leggerti:
    http://php.html.it/guide/lezione/298...ia-get-o-post/

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Allora se ho capito bene per la sicurezza mi creo un array con i nomi delle pagine e verifico se il dato passato fa parte degli array oppure no. Devo dire che non capisco quali problemi di sicurezza ci siano nelle inclusioni tramite GET...

    Per le variabili globali ho trovato con google che le dovrei definire così:

    $a = ppp;
    function pippo(){
    global $a;

    }

    E poi la posso usare all'interno della funzione, mentre il return se non sbaglio chiude una funzione e lo dovrei usare per eseguire l'include o sbaglio?

  5. #5
    Lascia stare le variabili globali. Sono un qualcosa che deve essere evitato.
    Ti ho postato la soluzione ed è in linea con quanto ti ha detto chi mi ha preceduto.

    Per capire le problematiche legate alla sicurezza leggiti il link che ti ho lasciato prima.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Originariamente inviato da oly1982
    Lascia stare le variabili globali. Sono un qualcosa che deve essere evitato.
    Ti ho postato la soluzione ed è in linea con quanto ti ha detto chi mi ha preceduto.

    Per capire le problematiche legate alla sicurezza leggiti il link che ti ho lasciato prima.
    Ho letto quell'articolo ma io sapevo che l'include funzionava, per ovvi motivi, solo su file locali...

    Un ultima cosa: la funzione ob_start() a cosa serve? Mi sono letto la documentazione su php.net ma non ho capito molto a causa dell'inglese

  7. #7
    Ti rispondo in maniera maccheronica perchè non sono un professionista della materia (quindi pronto ad essere smentito.

    ob_start() è una funzione che immagazzina l'output generato dal file all'interno del buffer del php.
    il buffer (non sò precisamente cosa è, ma in termini maccheronici) è una specie di memoria temporanea del php.
    Una volta immagazzinato è possibile:
    - operare su di esso e manipolarlo;
    - rilasciarlo in un momento desiderato dell'esecuzione dello script;
    - non sò cos'altro.
    Il tutto utilizzando apposite funzioni e parametri.

    ad esempio:
    Codice PHP:


    io sono bravo</p>
    <?php
    ob_start
    ();
    $output_prodotto ob_get_contents();
    $manipola_output str_replace('bravo''cattivo'$output_prodotto);
    echo 
    $manipola_output;
    ?>
    è un esempio squallido... (ob_start accetta funzioni di callback... etc etc)

    ---------------------
    nell'esempio che ho postato:
    Codice PHP:
                ob_start(); 
                
    header("HTTP/1.0 404 Not Found"); 
                exit; 
    io l'ho utilizzata in un ambito non opportuno e che dovrebbe essere gestito diversamente:
    essendo che inviavo un header, questo non può essere inviato se ho già inviato prodotto un output. Quindi io ho bloccato l'output con ob_start() e ho potuto inviare il mio bel header

    Ma ti ripeto:
    io l'ho utilizzato per gestire semplicisticamente una cosa che deve essere gestita diversamente!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Scusate se vi disturbo.

    Ma con il codice postato da oly1982 non viene incluso niente.

    Il codice html stampato è: codici vari... <body></body></html>, stop.

    Eppure se eseguo la pagina index .php con geany mi dice che non ci sono errori e mi stampa il codice html con l'inclusione, ma nel browser non va.

    Sono in locale su Ubuntu 10.10

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    67
    Ho caricato tutto su un server remoto e va, erano problemi di permessi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.