2012-05-25 9 views
5

Quiero tener una constante (una cadena) que esté disponible para todos los scripts PHP en el servidor.PHP: posible establecer constantes en el archivo predeterminado php.ini

Según http://php.net/manual/en/function.parse-ini-file.php esto es bastante fácil si analiza un archivo .ini adicional, sin embargo, no quiero analizar un archivo adicional, quiero establecer mi constante en el php.ini global sin tener que analizar nada en los guiones (De hecho, ese es todo el punto porque necesito la constante para encontrar las cosas para incluir/analizar/etc: cuando sé dónde estaría este archivo .ini adicional, ¡ya no lo necesito más!)

Solo inventando una nueva constante en php.ini y luego tratando de acceder con ini_get() no funciona, ¿hay alguna otra manera?

Yo mismo compilo Apache y PHP, así que también podría establecer la constante en tiempo de compilación y/o usar las constantes de Apache si fuera necesario.

Respuesta

7

Puede utilizar un PHP auto_prepend_file secuencia de comandos en su ini PHP para hacer esto, ya que se llevará a cabo antes de cualquiera de las secuencias de comandos de zona de usuario:

especifica el nombre de un archivo que es interpretado automáticamente antes del archivo principal. El archivo se incluye como si se llamara con la función require , por lo que se utiliza include_path.

para que pueda agregar una línea ini como:

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

El /home/user/script.php en:

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

Ahora en sus scripts PHP se puede acceder desde CONSTANT_NAME donde quieras ya que está disponible en todos los scripts PHP.

Utilizo esta técnica en mi servidor de transición que utiliza el alojamiento virtual masivo basado en mod_rewrite para que pueda dar a mis scripts PHP una raíz de documento exacta. He discutido esto en un blog post before.

+0

No es realmente lo que quería, pero funciona, gracias. – Robby75

+0

Desafortunadamente, es lo más cerca que se puede llegar. Lo que quiere no es realmente posible): – Treffynnon

0

Por lo que ha dicho, creo que encontrará que ya habrá algo similar disponible en $_SERVER, en particular 'DOCUMENT_ROOT'.

+0

Exactamente, necesito algo muy similar a DOCUMENT_ROOT (pero no a DOCUMENT_ROOT, que es el objetivo de esta pregunta) – Robby75

+0

@ Robby75 que es exactamente lo que estoy usando la solución en mi respuesta para lograr en mi servidor de ensayo: http://stackoverflow.com/a/10751734/461813 – Treffynnon

0

Simple. Cree un archivo xxx.php donde defina su constante y agregue ese archivo al include_path global en php.ini. Sin embargo, me gustaría añadir que mantener este tipo de constantes o variables globales no es una forma de trabajo recomendada, ya que puede olvidarse de dónde vienen las constantes y no está haciendo que sus aplicaciones sean muy portátiles y explícitas para otros desarrolladores.

Cuestiones relacionadas