2010-01-05 18 views
12

sólo poner en contexto para aclarar la cuestión principal:Cómo utilizar getenv() en php y SetEnv en un .htaccess con un php-cgi compilado en un servidor compartido

En mi máquina de desarrollo, es PHP5.3.1 instalado en Apache como módulo, uso el desarrollo de SetEnv APPLICATION_ENVIRONMENT en el archivo root .htaccess de mi aplicación. A continuación, es fácilmente recuperable de cualquier script php con getenv ('APPLICATION_ENVIRONMENT').

En el servidor de producción, en un host compartido (dreamhost), me compilé php5.3.1 ya que no era compatible directamente. Todo funciona bien, excepto que getenv ('APPLICATION_ENVIRONMENT') devuelve falso.

En el .htaccess de la raíz sharedhost para mi dominio, utilizo este archivo .htaccess

Options +ExecCGI 
AddHandler php-cgi .php 
Action php-cgi /cgi-bin/php.cgi 

<FilesMatch "^php5?\.(ini|cgi)$"> 
    Order Deny,Allow 
    Deny from All 
    Allow from env=REDIRECT_STATUS 
</FilesMatch> 

Options -indexes 

php5.cgi reside en/cgi-bin y funciona muy bien. Por supuesto, en la carpeta raíz de mi aplicación tengo otra definición .htaccess:

SetEnv APPLICATION_ENVIRONMENT production 

Pero cuando se utiliza getenv ('APPLICATION_ENVIRONMENT') devuelve falso, alguna idea de cómo resolver esto?

+0

Simplemente adivinando: ¿Quizás su host no permita que esta directiva se anule en archivos .htaccess? –

Respuesta

11

Ok, finalmente lo conseguí. En dreamhost, es posible usar fastcgi y, por lo tanto, declarar variables de entorno con él. Consiste en simplemente agregar esta secuencia de comandos simple

#!/bin/sh 
export PHP_FCGI_CHILDREN=2 
exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi 

Que es donde estaba mi PHP5.3.1 compilado. chmod 744 en ese archivo llamado dispatch.fcgi, que se le permitirá más memoria por el perro guardián de Dreamhost.

Después de que he añadido a mi dominio de .htaccess lo siguiente:

Options +ExecCGI 
AddHandler fastcgi-script fcg fcgi fpl 
AddHandler php5-fastcgi .php 
Action php5-fastcgi /dispatch.fcgi 

ahora en la raíz de la aplicación tengo otra .htaccess con:

SetEnv APPLICATION_ENVIRONMENT staging 

En un script PHP es es recuperable a través getenv ('REDIRECT_APPLICATION_ENVIRONMENT');

+0

¡¡¡oh gracias !!! Estaba perdiendo pelo tratando de establecer una variable de entorno en .htaccess. Pude finalmente hacerlo cambiando PHP de ejecutarse como una aplicación CGI a FastCGI. –

+5

¿Por qué usa getenv ('REDIRECT_APPLICATION_ENVIRONMENT') en lugar de getenv ('APPLICATION_ENVIRONMENT')? –

+0

Para que esto funcione, tuve que dejar la parte "REDIRECT_" anterior de la variable de entorno. –

9

Para la directiva SetEnv funcione, el servicio de alojamiento debe tener el módulo mod_env activa ...

Pero, incluso si está activa, tal vez usted no tiene que permiso para usar SetEnv.

Solo para asegurarse de que el problema no está en su código, puede verificar la salida de phpinfo(): en la parte inferior de la página, debe haber una sección que contenga variables de entorno como se ve en PHP, si la suya es no está allí, no es una buena señal para usted ...

+0

Sí, tiene razón, no encuentro nada en las variables de PHP bajo el servidor de producción y lo hago en mi máquina de desarrollo. Me estoy poniendo en contacto con su apoyo para esto y trataré de proporcionar una respuesta alternativa. –

+0

@Steven: Buena suerte ^^ –

Cuestiones relacionadas