2008-08-23 7 views
18

ich die PHP-Include-Pfad in den php.ini einstellen:PHP-Include-Pfad pro Site festlegen?

include_path = /path/to/site/includes/ 

Aber dann anderen Websites betroffen sind, so dass nicht gut.

ich die PHP sind in Anfang jeder Datei einstellen:

$path = '/path/to/site/includes/'; 
set_include_path(get_include_path() . PATH_SEPARATOR . $path); 

Aber das scheint wie eine schlechte Praxis und unübersichtlich Dinge.

So kann ich eine machen davon umfassen und dann sind sie in jeder Datei:

include 'includes/config.php'; 

oder

include '../includes/config.php'; 

Das ist, was ich jetzt tun, aber die gehören Weg config.php ändert sich je nachdem, was es beinhaltet.

Gibt es einen besseren Weg? Ist es wichtig?

Antwort

16

Wenn Sie Apache als Webserver verwenden, können Sie die Einstellungen überschreiben, indem Sie .htaccess Dateien verwenden. Details finden Sie unter the PHP manual.

Im Grunde legen Sie eine Datei mit der Bezeichnung .htaccess in Ihrer Website root, die einige PHP ini Werte enthält. Vorausgesetzt, dass Sie Apache so konfiguriert haben, dass Überschreibungen zulässig sind, verwendet diese Site alle Werte in Ihrer PHP-Konfiguration + die Werte, die Sie in der Datei .htaccess angeben.

Kann nur mit PHP_INI_ALL und PHP_INI_PERDIR TypV

wie angegeben auf der Seite I verknüpft verwendet werden. Wenn Sie durch die vollständige Liste klicken, sehen Sie, dass der Include-Pfad eine PHP_INI_ALL Direktive ist.

0

Sie können include_path auch in Ihrer php.ini-Datei einstellen. Ich bin ein Perl-Typ, also erwarte ich in der Lage zu laden, enthalten und haben include das Richtige tun. Ich habe alle meine Includes in einem bestimmten Verzeichnis, das zu include_path hinzugefügt wird. Ich kann Dinge wie

require_once "ClassName.php"; 

Ich brauche mir keine Sorgen über relative Pfade oder Standorte von Dateien.

Ich habe auch wie meine eigenen CustomRequire, Dinge zu tun geschrieben

function CustomRequire ($file) { 
    if(defined('MYINCLUDEPATH')) { 
     require_once MYINCLUDEPATH . "/$file"; 
    } else { 
     require_once $file; 
    } 
} 

auf diese Weise die ich ändern kann, wie ich zu einem späteren Zeitpunkt enthalten tun. Natürlich müssen Sie immer noch einen Weg finden, Ihren Include-Code einzuschließen :)

+0

Warum dissen Leute @ Garys Antwort? Eine schlechte Praxis hier bei SO meiner Meinung nach - das Ablehnen von Kommentaren aus den "grenzenlosen Weisheiten" * ohne * das Erklären in den Kommentaren. – amn

+0

Meh. Das ist PHP für dich. Ich benutze immer noch dieses System und es funktioniert großartig mit APC-Leistung. Wenn Sie können, verwenden Sie einen Autoloader. Das Problem mit einem automatischen Loader ist, dass Sie Ihre Klassennamen bastardisieren müssen, wenn Sie irgendeine Art von Struktur zu Ihrem Klassenlayout im Dateisystem haben wollen (zum Beispiel http://www.php.net/manual/en/language). oop5.autoload.php # 49496). Ich würde gerne bessere Optionen hören! –

+0

Gary, ich habe lediglich darauf hingewiesen, dass Leute dazu neigen, Dinge zu verwerfen, ohne sie zu kommentieren. Soweit es mich betrifft, ist Ihre Antwort legitim. – amn

1

Je nachdem, wie Ihr Host eingerichtet ist, können Sie möglicherweise eine php.ini Datei im Stammverzeichnis Ihres Home-Verzeichnisses mit zusätzlichen Konfigurationsanweisungen platzieren .

7

Erik Van Brakel gab, IMHO, eine der besten Antworten.

Mehr, wenn Sie Apache & Virtuelle Hosts verwenden, können Sie direkt in ihnen einrichten. Mit dieser Methode müssen Sie nicht vergessen, php_admin-Befehle in Ihrer .htaccess-Datei zu belassen.

4

Verwenden Sie eine php.ini-Datei im Website-Stamm, wenn Ihr Setup PHP als CGI (der häufigste Fall auf gemeinsam genutzten Hosts) mit der gleichen Syntax wie die serverweite php.ini verwendet; steckte es in .htaccess, wenn Sie PHP als Apache-Modul haben (eine phpinfo tun(), wenn nicht sicher):

php_value include_path „wo auch immer“

Beachten Sie, dass pro-Ordner php.ini nicht funktioniert Unterordner beeinflusst.

+0

'php_value include_path" /var/www/somesite.com/include_path/ "' – velcrow

1

Ihre Anwendung sollte eine Konfigurationsdatei in PHP geschrieben haben. Dann schließe das mit einer relativen Seite in jede Seite des Programms ein. Diese Konfigurationsdatei hat eine Variable für den Pfad zu den Includes dir, Templates dir, images dir usw.

3

Warum denkst du, dass append, Pfad einzuschließen, schlechte Praxis ist?

Dieser Code in der Nähe von oben auf Root-Skript nicht so schlimm sein sollte ...

$path = '/path/to/site/includes/'; 
set_include_path($path . PATH_SEPARATOR . get_include_path()); 

IMHO ist der Hauptvorteil ist, dass es tragbar und kompatibel nicht nur mit Apache

EDIT: Ich sah ein Nachteil dieser Methode: kleine Leistungseinbußen. siehe http://www.geeksengine.com/article/php-include-path.html

+0

Abgesehen von der Leistung, die Sie erwähnen, wenn ich diese Frage stellte, arbeitete ich an einer Site mit vielen separaten Dateien und nicht an einem einzigen root-Skript, das alle Anfragen richten sich an. – Annan