Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    [PILLOLA] Percorsi assoluti nei propri script

    Molto spesso capita di dover scegliere tra percorsi dinamici e percorsi assoluti ... sia per includere file, sia per caricarli, sia per richiamare link interni del sito via html e cosi via ... e molto spesso si ci ritrova a dover adottare strane soluzione per risolvere il problema

    quella che vi propongo qua è, credo, una buona soluzione, che risolve tutti questi problemi ))

    Qual'è il problema?

    Partiamo dal presupposto che è FONDAMENTALE usare percorsi dinamici ... perché non è possibile modificare ogni volta il percorso in tutte le variabili di tutto il sito, quindi dovrebbe essere buona abitudine avere una variabile o una costante dove inserire il percorso del sito in modo usarla come punto di riferimento ... quindi in realtà i percorso sono dinamici ... ma dinamici rispetto a questa variabile, perché realmente sono fissi

    quando però si fa una cosa del genere è necessario pre impostare il percorso, e ciò può essere MOLTO seccante ... sul vostro pc c'è un percorso, in remoto c'è un altro percorso, poi magari dovete mettere tutti i file in un altra dir per fare la demo, e si deve cambiare ancora il percorso ... cosa che quindi rende più complessa l'installazione per l'utente finale o per chi non si sa muovere

    Requisiti
    E' possibile ricorstruire dinamicamente il percorso del sito in maniera molto semplice ... e per far questo è richiesto un solo requisito ... avere un file che viene SEMPRE incluso in tutte le pagine ... e questo può benissimo essere quello della configurazione ... dove magari dichiarate i settaggi di mysql, o instanziate delle classi, o includete dei file e cosi via

    Come risolvere il problema?
    Siccome php è fantastico ... ha delle costanti altrettanto fantastiche
    esiste la costante __FILE__ che varia da file a file ... ovvero non è una reale costante.
    ok ho detto tutto e nulla! Mi spiego meglio

    Mettiamo che abbiamo 2 file, uno che si chiama daniele.php e l'altro si chiama dll.php.
    Se all'interno di questi due file facciamo stampare, tramite un echo, la costante __FILE__ otterremo, in tutti e due i casi, i due percorsi completi del file!

    Cosa ci permette di far questo? semplice ... se il file di configurazione sta nella cartella principale del sito ... beh ... per sapere dov'è il sito basta estrarre la cartella nel quale risiede il file

    ecco come ...

    codice:
    define('SITE_PATH', dirname(__FILE__));
    se dovessimo includere un file che sta dentro la cartella include possiamo fare

    codice:
    include('include/file.inc.php');
    o

    codice:
    include(SITE_PATH . 'include/file.inc.php');
    ottenendo quindi lo stesso risultato, ma con una differenza sostanziale: mentre in certe situazioni le path dinamiche non sono utilizzabili quelle fisse lo sono sempre!

    Inoltre questo ci permette di ottenere il percorso web ... come? basta sostituire all'intero percorso presente in config la document root con l'host http!

    codice:
    define('SITE_URL', str_replace(
        $_SERVER['DOCUMENT_ROOT'],
            (
                substr(
                    $_SERVER['DOCUMENT_ROOT'],
                        -1,
                            1
                ) == '/' ?
                    $_SERVER['HTTP_HOST'] . '/' :
                        $_SERVER['HTTP_HOST']
            ),
                SITE_PATH
    ));
    in questo modo basta inserire una variabile che il template engine del sito si occuperà di sostutire con l'url del sito, ovvero con SITE_URL

    ovviamente poi dall'utilizzo della costante __FILE__ si possono ricavare tante altre utilissime cose ... però questo è un altro discorso

    per completezza ... anche se non c'entra nulla ... esiste anche la costante __LINE__ che indica la linea corrente

    di seguito sono presenti 3 link che portano alle pagine dove vengono elencate le costanti "magiche", le costanti dell'engine zend e le costanti di php
    http://it2.php.net/manual/en/languag...predefined.php
    http://it2.php.net/manual/en/reserve...s.standard.php
    http://it2.php.net/manual/en/reserve...tants.core.php


    PS: ho scritto tutto senza rileggerlo ... se vedete ORRORI avvertite che correggo

  2. #2
    Utente di HTML.it L'avatar di Rommel
    Registrato dal
    Jun 2004
    Messaggi
    955
    grazie,
    molto utile questa pillola.
    In a world without walls and fences, who needs windows and gates?

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    279
    molto utile...grazie

  4. #4
    echo __FILE__;
    echo '
    ';
    define('SITE_PATH', realpath(__FILE__));
    echo SITE_PATH;


    ... a me da lo stesso risultato, quindi rende completamente vano questo:
    include(SITE_PATH . 'include/file.inc.php');


    poi, secondo me le paths non devono essere per forza assolute, nel senso che la gerarchia ./ e ../ e DIR/ sara' identica in locale, sull' host e sul CDROM ... magari gli users Linux sono abituati, ad esempio, a far partire tutte le inclusioni sulla root , con /percorso/etc/user/file.php ... ma questo in windows non ha senso .... / perche' e' c: e riscriversi tutto e' da folli, mi serve la classe sulla cartella classi ?

    require( 'classi/MiaClasse.php' );

    punto ...


    invece per i links uso spesso, praticamente sempre, una cosa molto semplice

    se i links sono interni alla pagina prima di scrivere il link, senza scrivere tutto il percorso o tutto l' host scrivo semplicemente

    {root}pagina_interessata.php

    oppure

    {root}FOLDER/altra_pagina.php

    questo mi permette di fare un parsing sull' echo dell' ouptut, parsing molto semplice:

    echo str_replace( '{root}', ROOT_PATH, $output );

    dove ROOT_PATH sara' "http://localhost/" o "http://www.miosito.it/" insomma, il percorso assoluto di dove sto' lavorando, tipo

    define( 'ROOT_PATH', 'http://localhost/' );

    o

    define( 'ROOT_PATH', 'http://'.$_SERVER["HTTP_HOST"].'/' );


    scusate, ho editato 4 volte
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    ehm ... antré ... non è cose lineare come dici tu ... ci sono dei casi dove ti servono PERFORZA quelle assolute

    mentre per quanto riguarda i links ... ad esempio se usi il rewrite url di apache? e metti imgs/logo.jpg ... non andrà mai

    why?

    tramite le rewrite url le path sono diverse e quindi nun va (anche se dipende molto dalla rewrite url)


    solo che appena sposti la cartella ti tocca cambiare la costante ... e questo può diventare seccante ... soprattutto se ti capita di doverlo fare + volte ... ad es passi da localhost a demo.3site.it/site a www.site.it/new a www.site.it

    cioe ... ogni volta devi cambiarlo ... e se lo scordi ... si ci vuole quasi un attimo a cambiarlo ... ma devi cambiarlo ogni volta ed è tempo che se ne va ... e che può essere risparmiato con questo semplice accorgimento

  6. #6

  7. #7
    [supersaibal]Originariamente inviato da bubu77
    aggiunta [/supersaibal]
    :smak:

  8. #8
    [supersaibal]Originariamente inviato da daniele_dll
    mentre per quanto riguarda i links ... ad esempio se usi il rewrite url di apache? e metti imgs/logo.jpg ... non andrà mai [/supersaibal]
    io uso sempre il rewrite url di apache e va sempre ...


    [supersaibal]Originariamente inviato da daniele_dll
    solo che appena sposti la cartella ti tocca cambiare la costante ... e questo può diventare seccante ... soprattutto se ti capita di doverlo fare + volte ... ad es passi da localhost a demo.3site.it/site a www.site.it/new a www.site.it
    [/supersaibal]
    alla fine io alvoro sempre allo stesso modo, ovvero ho un file, che chiama le inclusioni su cartella a parte, una cartella sezioni, una classi, una grafica ... in pratica io mi trovo sempre sulla SITE_PATH, qualunque essa sia, perche' le folders non sono accessibili, il rewrite url mi rimanda sempre e comunque alla pagina .php che gestisce tutto ... quindi non mi e' mai capitato uqesto problema, o meglio, mi e' capitato ma ho scritto, in passato, la path a mano e tanti saluti

    pero' resta il fatto di quello che ti ho scritto ... ovvero

    echo __FILE__; // e' esattamente uguale a ..
    echo '
    ';
    define('SITE_PATH', realpath(__FILE__));
    echo SITE_PATH; // ... questo ...


    non e' che volevi scrivere questo ?

    $SITE_PATH = pathinfo( __FILE__ );
    define('SITE_PATH', $SITE_PATH['dirname'] );
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    [supersaibal]Originariamente inviato da andr3a
    io uso sempre il rewrite url di apache e va sempre ...
    tramite le rewrite url le path sono diverse e quindi nun va (anche se dipende molto dalla rewrite url)
    prova a farti trasformare un url ... da

    site.it/var1/var2/var3/index.html in site.it/index.php?var1 ......var3

    e vedrai che (ovviamente xche il browser fa richiesta per certi file) non va

    pero' resta il fatto di quello che ti ho scritto ... ovvero

    echo __FILE__; // e' esattamente uguale a ..
    echo '
    ';
    define('SITE_PATH', realpath(__FILE__));
    echo SITE_PATH; // ... questo ...


    non e' che volevi scrivere questo ?

    $SITE_PATH = pathinfo( __FILE__ );
    define('SITE_PATH', $SITE_PATH['dirname'] ); [/supersaibal]
    pardon ... volevo scrivere

    dirname(__FILE__)

    ora chiedo a gianko di correggere

  10. #10
    [supersaibal]Originariamente inviato da daniele_dll
    ci sono dei casi dove ti servono PERFORZA quelle assolute [/supersaibal]
    Per esempio?

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.