Impostazione del percorso di inclusione PHP in base al sito?
Domanda
Posso impostare il percorso di inclusione PHP nel file php.ini
:
include_path = /path/to/site/includes/
Ma poi altri siti web sono interessati, quindi non va bene.
Posso impostare l'inclusione PHP all'inizio di ogni file:
$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
Ma questa sembra una cattiva pratica e ingombra le cose.
Quindi posso includerlo e quindi includerlo in ogni file:
include 'includes/config.php';
O
include '../includes/config.php';
Questo è quello che sto facendo adesso, ma il percorso di inclusione di config.php
cambierà a seconda di cosa lo include.
C'è un modo migliore?Importa?
Soluzione
Se utilizzi Apache come server web puoi sovrascrivere (se lo consenti) le impostazioni utilizzando .htaccess File.Vedere il manuale PHP per dettagli.
Fondamentalmente inserisci un file chiamato .htaccess nella root del tuo sito web, che contiene un po' di PHP ini
valori.A condizione che tu abbia configurato Apache per consentire gli override, questo sito utilizzerà tutti i valori nella tua configurazione PHP, + i valori specificati nel .htaccess file.
Può essere utilizzato solo con
PHP_INI_ALL
EPHP_INI_PERDIR
direttive di tipo
come indicato nella pagina che ho linkato.Se fai clic sull'elenco completo, vedrai che il percorso di inclusione è a PHP_INI_ALL
direttiva.
Altri suggerimenti
Erik Van Brakel ha dato, secondo me, una delle migliori risposte.
Inoltre, se utilizzi Apache e host virtuali, puoi configurare gli include direttamente al loro interno.Usando questo metodo, non dovrai ricordarti di lasciare i comandi php_admin nel tuo .htaccess.
Usare un php.ini file nel sito web radice, se la tua configurazione utilizza PHP COME CGI (il caso più frequente sugli host condivisi) con la stessa sintassi dell'intero server php.ini;mettilo dentro .htaccess
se hai PHP come modulo Apache (fai a phpinfo()
se non sei sicuro):
php_value include_path "wherever"
Tieni presente che per cartella php.ini does
non influisce sottocartelle.
Perché pensi che aggiungere per includere il percorso sia una cattiva pratica?
Questo codice vicino alla parte superiore dello script root non dovrebbe essere così male...
$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());
IMHO il vantaggio principale è che è portatile e compatibile non solo con Apache
MODIFICARE:Ho notato uno svantaggio di questo metodo:piccolo impatto sulle prestazioni.Vedere http://www.geeksengine.com/article/php-include-path.html
A seconda di come è configurato il tuo host, potresti essere autorizzato a inserire un file php.ini
file nella radice della tua home directory con direttive di configurazione aggiuntive.
La tua applicazione dovrebbe avere un file di configurazione scritto in PHP.Quindi includilo con una pagina relativa in ogni pagina del programma.Quel file di configurazione avrà una variabile per il percorso della directory include, directory dei modelli, directory delle immagini, ecc.
Puoi impostare include_path
anche nel tuo file php.ini.Sono un tipo da Perl, quindi mi aspetto di essere in grado di caricare include e avere include
fare la cosa giusta.Ho tutti i miei include in una directory specifica, a cui viene aggiunta include_path
.Posso fare cose come
require_once "ClassName.php";
Non devo preoccuparmi dei percorsi relativi o delle posizioni dei file.
Ho anche scritto il mio CustomRequire
fare cose come
function CustomRequire ($file) {
if(defined('MYINCLUDEPATH')) {
require_once MYINCLUDEPATH . "/$file";
} else {
require_once $file;
}
}
In questo modo posso modificare la modalità di inclusione in un secondo momento.Naturalmente, devi ancora trovare un modo per includere il tuo codice di inclusione :)