2010-01-05 6 views
12

Basta mettere in un contesto di chiarire la questione principale:Come usare getenv() in PHP e SetEnv in un .htaccess con un php-cgi compilato su un host condiviso

Sulla mia macchina di sviluppo, è PHP5.3.1 installato su Apache come modulo, utilizzo SetEnv APPLICATION_ENVIRONMENT nello sviluppo del file .htaccess root della mia applicazione. È quindi facilmente recuperabile da qualsiasi script php con getenv ('APPLICATION_ENVIRONMENT').

Sul server di produzione, su un host condiviso (dreamhost), ho compilato php5.3.1 poiché non era direttamente supportato. Tutto funziona bene, tranne che getenv ('APPLICATION_ENVIRONMENT') restituisce false.

Nella radice .htaccess sharedhost per il mio dominio, io uso questo file .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 risiede in/cgi-bin e funziona molto bene. Naturalmente nella cartella principale della mia domanda ho un altro che definisce .htaccess:

SetEnv APPLICATION_ENVIRONMENT production 

Ma quando si utilizza getenv ('APPLICATION_ENVIRONMENT') restituisce false, qualche idea di come risolvere questo?

+0

Solo supposizioni: Forse il tuo host non permette che questa direttiva sia sovrascritta nei file .htaccess? –

risposta

11

Ok, finalmente ho capito. Su dreamhost, è possibile utilizzare fastcgi e quindi dichiarare variabili di ambiente con esso. Consiste semplicemente nell'aggiunta di questo semplice script

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

Qual è il posto dove si trovava il mio PHP5.3.1 compilato. chmod 744 su quel file chiamato dispatch.fcgi che sarà più memoria dal watchdog di dreamhost.

Dopo che ho aggiunto al mio dominio di .htaccess la seguente:

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

ora nel principale dell'applicazione ho un altro .htaccess con:

SetEnv APPLICATION_ENVIRONMENT staging 

In uno script PHP è è recuperabili tramite getenv ('REDIRECT_APPLICATION_ENVIRONMENT');

+0

oh grazie !!! Stavo perdendo i capelli cercando di impostare una variabile di ambiente in .htaccess. Sono stato finalmente in grado di farlo cambiando PHP dall'esecuzione come applicazione CGI a FastCGI. –

+5

Perché stai utilizzando getenv ('REDIRECT_APPLICATION_ENVIRONMENT') invece di getenv ('APPLICATION_ENVIRONMENT')? –

+0

Per far sì che funzioni per me, ho dovuto interrompere la parte "REDIRECT_" della variabile di ambiente. –

9

Per la direttiva SetEnv al lavoro, il vostro servizio di hosting deve avere il modulo mod_env attivato ...

Ma, anche se è attivato, forse non è necessario il permesso di utilizzare SetEnv.

Giusto per essere sicuri che il problema non sia nel codice, potresti voler controllare l'uscita di phpinfo(): nella parte inferiore della pagina, dovrebbe esserci una sezione contenente le variabili di ambiente come visto da PHP - se il tuo è non lì, non è un buon segno per voi ...

+0

Sì, hai ragione, non trovo nulla sotto le variabili PHP sotto il server di produzione e lo faccio sul mio computer di sviluppo. Sto contattando il loro supporto per questo e cercherò di fornire una soluzione alternativa. –

+0

@Steven: Buona fortuna ^^ –

Problemi correlati