Visualizzazione dei risultati da 1 a 4 su 4

Discussione: require_once e path

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613

    require_once e path

    Provo a farmi capire

    root/sito/file.php
    root/sito/lib/classe1.php

    file.php usa classe1.php e la include con un require_once.

    classe1.php deve caricare delle costanti contenute in constant.php con un require_once.

    Qui nasce il problema.

    caso1 (funziona):

    root/sito/lib/constant.php
    classe1.php
    Codice PHP:
    require_once("constant.php"); 
    caso2 (non trova il file da includere):

    root/sito/constant.php
    classe1.php
    Codice PHP:
    require_once("../constant.php"); 
    Io devo per forza utilizzare il caso2, e il path corretto sarebbe lib/constant.php.. solo che a me serve che questo path sia indipendente dal file che usa classe1...

    Capito?
    Perchè in caso 1 non da problemi e in caso2 invece si?

  2. #2
    tutt'altro che chiaro.

    se metti ../file.php scendi di un direttorio

    invece ./file.php sei nello stesso direttorio...

    il file che viene incluso, che a sua volta include un altro file, lo dave fare dalla nuova posizione (path) che acquisisce dall'inclusione e non dal suo path originario.

    Conviene sempre scendere a livello di Document root per fare queste inclusioni annidate, in modo che siano sempre valide da qualunque punto della struttura siano richiamati. (percorso assoluto).


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    tutt'altro che chiaro.
    Cioè non mi sono spiegato?

    Il fatto che le inclusioni annidate siano interdipendenti l'ho capito. Quello che non capisco è perche nel primo caso funziona (trovandosi nella stessa cartella) e non funziona nel secondo (trovandosi constant.php ad un livello superiore).

    Siccome funzionava nel primo mi sembrava che la prima inclusione fosse fatta da classe1 e non da file.php

    Così è come la vedevo io:
    File necessita di class1 che necessita di constant allora class1 include constant e poi file include class1.

    Ti sto confondendo di più?

  4. #4
    La risposta e' sempre la stessa... usa un path assoluto.

    require_once "$_SERVER[DOCUMENT_ROOT]sito/lib/constant.php";

    Lo slash tra document root e sito ci puo' essere o meno. dipende da come e' configurato il percorso su apache. Stampa l'array $_SERVER e vedi se c'e' oppure no.

    echo $_SERVER['DOCUMENT_ROOT'];

    quando richiedi un file questo viene inserito al posto del require che lo invoca ed eseguito. Se a sua volta deve includere un file il path necessario sara' quello da in cui si trova in quel momento a raggiungere il file da includere. Con il path assoluto va bene su qualunque pc e direttorio.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.