2008-09-28 18 views
18

Me gustaría cambiar automáticamente la configuración de conexión de mi base de datos por host virtual, para que no tenga que editar ningún código PHP, ya que se mueve desde el almacenamiento en vivo hasta el acceso a bases de datos diferentes. Esto es en un solo servidor dedicado.Configuración de variables de PHP en httpd.conf?

Así que me preguntaba, ¿puedo establecer una variable o constante de PHP en httpd.conf como parte de la definición de vhost que el sitio puede usar para apuntarse automáticamente a una base de datos de prueba?

$database = 'live'; 
if (some staging environment variable is true) { 
    $database = 'testing'; // and not live 
} 

Si esto no es posible, supongo que en este caso puedo examinar con seguridad el nombre de host que estoy corriendo a decirle, pero me gustaría algo un poco menos frágil

esto hace que la esperanza sentido

muchas gracias

Ian

+0

Esta no es una buena idea. Al menos, en mi humilde opinión. Use su VC, haga una etiqueta y comprometa los cambios necesarios y termine con esto. Será mucho más limpio que algún tipo de configuración del lado del servidor. – Till

+2

Hacemos veinte lanzamientos por semana, Hasta ... ¿Por qué es lo que estás sugiriendo una buena idea? – Polsonby

+0

Tenga en cuenta que los scripts de shell que se ejecutan fuera de apache también necesitarán conocer su entorno. –

Respuesta

10

Did que ha intentado usar el archivo .htaccess? Puede anular los valores php.ini usándolo.

Sólo hay que poner el archivo .htaccess en el directorio htdocs:

php_value name value 

información adicional de entrega:

+0

Hacer esto a través de htaccess suena como una idea mucho mejor que httpd.conf. –

+14

No estoy de acuerdo; hacerlo en la sección de configuración de vhost es mejor, ya que significa que puede deshabilitar .htaccess por completo, que es una ganancia de rendimiento para apache, ya que no tiene que buscar un archivo .htaccess para cada solicitud. –

+0

Si esto todavía no funciona, compruebe en su httpd.conf un comando AllowOverride none. Pasé 45 minutos tratando de descubrir por qué mi archivo .htaccess estaba siendo ignorado en este momento. –

70

Sí ... usted puede hacer esto:

SetEnv DATABASE_NAME testing 

y luego en PHP:

$database = $_SERVER["DATABASE_NAME"]; 

o

$database = getenv("DATABASE_NAME"); 
+1

Por lo que sé, debe ser $ _SERVER ['DATABASE_NAME'] en lugar de $ _ENV. Probado aquí en php 5.2 debian y los vars no están insertados en $ _ENV pero en $ _SERVER – ChrisR

+0

Parece que tiene razón. $ _ENV funciona en la línea de comandos, pero no parece que se llene cuando se ejecuta bajo Apache. –

+6

Esto suena más como la respuesta que OP estaba pidiendo. La respuesta aceptada es para anular la configuración. – RickMeasham

14

Se puede establecer una variable de entorno y recuperarlo con PHP.

En httpd.conf:

SetEnv database testing 

En su PHP:

if (getenv('database') == 'testing') { 

o

if ($_SERVER['database'] == 'testing') { 
3

no sería establecer una variable de entorno, como esto también es visible en las secuencias de comandos predeterminadas li ke PhpInfo();

sólo tiene que utilizar un php_value en su .htaccess justo por encima de la carpeta htdocs y listo y seguro :)

2

El problema con .htaccess es que es parte del árbol de código base. Y el árbol de código base es parte de VC/SVN. Por lo tanto, cualquier cambio en local/dev se traslada a la producción. Mantener la configuración de la variable env en httpd.conf le ahorra el esfuerzo de tener cuidado de no sobrescribir accidentalmente el servidor frente a la bandera dev. A menos, por supuesto, que desee hacer con la dirección IP o el nombre de host, los cuales no son enfoques escalables.

+1

Sin mencionar que también puede configurarlo mientras se define un VirtualHost. – Arda

0

También estaba buscando este tipo de solución. Lo que encontré es esto, en Apache puede usar el SetEnv KeyName DataValue en el http.conf y en IIS puede usar la configuración rápida de CGI >> Editar ... >> Variables de entorno >> ... y agregar KeyName, DataValue.

Esto a su vez permite que el PHP $var = $_SERVER["KeyName"]; se establezca en el DataValue y se utilice según sea necesario tanto en IIS como en Apache de forma coherente.

Sé que este es un caso de uso extraño. Uso WAMP en el trabajo y MAMP en casa, así que es bueno poder trabajar de la misma manera.

Cuestiones relacionadas