2014-04-07 37 views
12

Ho una variabile sul mio sito chiamato $ basePath che è impostato come:PHP include percorso assoluto

$basePath = '/Systems/dgw/'; 

Io lo utilizzo su tutti i miei tag CSS, JS e immagini come così (accorciata per una migliore visibilità) :

Non ho alcun problema con quelli inclusi e funzionano bene ovunque e in qualsiasi cartella in cui sono.

ho una certa pagina inclusa che ha la seguente riga:

<img src="<?php echo $basePath; ?>images/new_logo.png" alt="logo"/> 

E l'immagine mostra bene. La riga dopo afferma:

<?php include($basePath.'include/assets/common/topMessages.php');?> 

Ma l'inclusione non accade. Quando provo in questo modo:

<?php include('../../include/assets/common/topMessages.php');?> 

Funziona.

Qualcuno ha idea di cosa potrebbe essere sbagliato?

+0

'echo' non include _include_ qualcosa ... – CBroe

+0

Siamo spiacenti, ha copiato la riga sbagliata. Fisso. – digicom

+5

Fondamentalmente c'è una distinzione tra la tua webroot (ad esempio 'www.esempio.com /' è la radice del tuo sito web) e la radice di un filesystem (unix). Il webroot è mappato su un percorso nel filesystem; spesso 'www.esempio.com /' è mappato su qualcosa come '/ var/www/example.com/http_docs /'. Il tuo server web traduce automaticamente qualsiasi richiesta di '/ a/b/c' in'/var/www/example.com/http_docs/a/b/c'. Tuttavia, quando includi un file tramite PHP, al webserver non viene chiesto di tradurre il percorso, e come tale cerca '/ a/b/c' nel tuo filesystem, che ovviamente non esiste. – Tularis

risposta

34

Non è possibile includere file php relativamente al proprio webroot in questo modo, perché se si utilizza la barra come primo carattere, il riferimento andrà molto più in profondità della sola radice del documento. Così, invece di utilizzare il BasePath, si potrebbe fare qualcosa di simile:

<?php 
    $path = $_SERVER['DOCUMENT_ROOT']; 
    $path .= "/yourpath/yourfile.php"; 
    include_once($path); 
?> 
+0

Che ha funzionato. Grazie ! – digicom

0

Se il server non popola il "document_root", potrebbe essere necessario questo



require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/path/to/file.php"); 

Io uso questa riga di codice. Torna alla "cima" dell'albero del sito, quindi passa al file desiderato.
Per esempio, diciamo che ho questo albero di file:
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php

posso includere il file functions.php da ovunque mi trovi, semplicemente copia incollando

require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/_resources/functions.php"); 



Se è necessario utilizzare questo codice molte volte, è possibile creare una funzione che restituisce il "str_repeat ('../',(substr_count(getenv('SCRIPT_URL'),'/')-1)) "parte. Quindi inserisci questa funzione nel primo file che includi. Ho un file "initialize.php" che includo nella parte superiore di ogni pagina php e che contiene questa funzione.La prossima volta che devo includere i file, ho infatti basta usare la funzione (denominata "path_back"):

require(path_back()."/_resources/another_php_file.php"); 
0

è possibile aggiungere un include_path = ".:/home/myuser/mysite.com/" al vostro php.ini oppure aggiungere qualcosa di simile nello script prima della include o require:

set_include_path(get_include_path() . ":/home/myuser/mysite.com/"); 

Il primo funziona per tutti gli script in esecuzione nel tuo sito web.

La seconda opzione funziona solo per lo script che contiene il codice setincludepath, per il resto dell'applicazione non funzionerà a meno che non si disponga di un oggetto chiamato in ogni script che aggiunge lo setincludepath.