2012-05-25 7 views
5

setzen Ich möchte eine Konstante (eine Zeichenfolge), die für alle PHP-Skripts auf dem Server verfügbar ist.PHP: möglich, Konstanten in Standard-php.ini-Datei

Nach http://php.net/manual/en/function.parse-ini-file.php ist dies ziemlich einfach, wenn Sie eine zusätzliche INI-Datei parsen, aber ich möchte keine zusätzliche Datei parsen, ich möchte meine Konstante in der globalen php.ini setzen, ohne etwas einlesen zu müssen die Skripte. (In der Tat ist das der springende Punkt, weil ich die Konstante brauche, um das Zeug zu finden/parse/etc: Wenn ich weiß, wo diese extra .ini-Datei wäre, brauche ich sie nicht mehr!)

Einfach erfinden eine neue Konstante in php.ini und dann versuchen, mit ini_get() darauf zuzugreifen, gibt es einen anderen Weg?

Ich kompiliere Apache und PHP selbst, also könnte ich auch die Konstante zur Kompilierzeit setzen und/oder Apache-Konstanten verwenden, wenn das nötig ist.

Antwort

7

Sie ein PHP-auto_prepend_file Skript in PHP-ini verwenden können, dies zu tun, wie es vor jeder Ihrer Benutzer-Land Skripte ausgeführt werden:

Gibt den Namen einer Datei, die automatisch vor dem analysiert wird, Hauptdatei. Die Datei ist enthalten, als ob sie mit der Funktion require aufgerufen wurde, daher wird include_path verwendet.

So können Sie eine ini Zeile wie hinzufügen:

auto_prepend_file="/home/user/script.php" 

Die in /home/user/script.php:

define('CONSTANT_NAME', 'your nice value here'); 

Jetzt in Ihrem PHP-Skripten können Sie CONSTANT_NAME zugreifen wo immer Sie möchten, da es in allen PHP-Skripten verfügbar ist.

Ich verwende diese Technik auf meinem Staging-Server, der mod_rewrite-basiertes massenvirtuelles Hosting verwendet, so dass ich meinen PHP-Skripten einen genauen Dokumentenstamm geben kann. Ich habe dies in einer blog post before diskutiert.

+0

Nicht wirklich, was ich wollte, aber es funktioniert, danke. – Robby75

+0

Leider ist es so nah wie möglich. Was Sie wollen ist eigentlich nicht möglich): – Treffynnon

0

Von dem, was Sie gesagt haben, ich denke, Sie werden feststellen, dass bereits etwas ähnliches bereits in $_SERVER, insbesondere "DOCUMENT_ROOT", verfügbar sein wird.

+0

Genau, ich brauche etwas sehr ähnlich zu DOCUMENT_ROOT (aber nicht DOCUMENT_ROOT, was der ganze Punkt dieser Frage ist) – Robby75

+0

@ Robby75 ist genau das, was ich die Lösung in meiner Antwort zu erreichen bin Auf meinem Staging-Server: http://StackOverflow.com/a/10751734/461813 – Treffynnon

0

Einfach. Erstelle eine Datei xxx.php, wo du deine Konstante definierst und füge diese Datei dem globalen include_path in php.ini hinzu. Ich möchte hinzufügen, dass das Halten dieser Art von globalen Konstanten oder Variablen keine empfohlene Arbeitsweise ist, da Sie vielleicht vergessen, woher die Konstanten kommen und Ihre Anwendungen nicht sehr portabel und explizit für andere Entwickler machen.