2009-07-16 8 views
27

dichiarazioni Attualmente sul mio sito che sto usando come:come aggiungere un percorso per include_path di PHP in .htaccess

include 'head.php'; 
include '../head.php'; 
include '../../head.php'; 

a seconda di come molte cartelle nidificate profondo io sono. Sono sicuro che c'è un modo migliore per farlo.

Sono convinto che la soluzione sia .htaccess, ma non sono sicuro di come implementarla. Se inserisco:

php_value include_path "public/html/root" 

... perdo il resto dei miei percorsi (/usr/lib/php, ecc). Ho provato ingenuamente:

php_value include_path $include_path . "(path)" 

ma ovviamente questo non ha funzionato. Come potrei anteporre o aggiungere un singolo percorso a questo elenco con .htaccess?

risposta

22

Se non è possibile modificare il file php.ini in sé, si potrebbe aggiungere

set_include_path(get_include_path() . PATH_SEPARATOR . $path_to_add); 

davanti ai vostri include dichiarazioni.

Tuttavia, se si riscontrano problemi include o require, è probabilmente un odore di codice. La soluzione migliore sarebbe una buona progettazione orientata agli oggetti con una buona funzione __autoload.

+0

Purtroppo sono su un server con molti altri siti in questo momento ... Non voglio mettere il path_to_add in ogni singolo file perché è qualcosa di strano come/home/12345678/public_html ... I ' d solo come aggiungere "public_html" al percorso di inclusione nel modo più semplice possibile. Fare una ricerca e sostituirlo quando il sito viene trasferito sembra goffo. – zildjohn01

+0

Puoi cercare l'attuale php 'include_path' con' php_info() 'o' get_include_path() 'e quindi aggiungi php_value include_path" public/html/root:/first/old/path:/second/old/path " al tuo '.htaccess'. Dovresti farlo solo una volta. – Otterfan

+0

Vero, ma speravo in una soluzione più elegante. Speriamo che non riconfigurino il server in qualunque momento presto. Comunque grazie per l'aiuto, questo è probabilmente il meglio che può ottenere. – zildjohn01

27

Crea nella sub-sub-directory un file .htaccess con il contenuto

php_value include_path '../../includes' 

o qualsiasi altra cosa include_path è giusto per quella directory.

Vantaggi:

  1. No brutto hack con più include con profondità diverse. Solo include 'head.php'.
  2. Nessuna dipendenza dalla modifica php.ini.
  3. Non è necessario utilizzare set_include_path() prima di includerlo.
  4. Nessuna dipendenza dall'inclusione di costanti come include INCLUDE_PATH . 'head.php'.

prezzo da pagare:

È figliata il sub-sub-directory ciascuno con un file .htaccess.

+2

Mi piace, e apprezzo la pubblicazione con benefici e costi chiaramente articolati. Non mi piace il littering, ma lo sto facendo. Grazie! :) –

+0

Molto utile con Zend Framework –

+1

Mi piace molto questo metodo perché a) disaccoppia la configurazione della mia applicazione dalla logica del mio ricorso (n 'set_include_path()' chiamate), eppure la configurazione della mia applicazione rimane all'interno della mia applicazione e b) si disaccoppia la configurazione dell'applicazione dal mio ambiente applicativo (nessuna modifica a 'php.ini' o' httpd.conf' o altro). Certo, "soffrirai" da un'operazione di lettura extra per directory per richiesta web, ma allora? Un'app di PHP di dimensioni medie avrà comunque dozzine o più PHP inclusi su ogni richiesta, a meno che non sia distribuito per produrre tramite qualcosa come ScriptJoiner. –

Problemi correlati