2010-01-05 7 views
12

tylko wprowadzenie w kontekście wyjaśnienia główne pytanie:Jak używać getenv() w PHP i SetEnv w .htaccess z skompilowanego php-cgi na wspólnej przyjmującego

Na moim komputerze deweloperskim, PHP5.3.1 jest zainstalowany na Apache jako moduł, korzystam z rozwoju SetEnv APPLICATION_ENVIRONMENT w głównym pliku .htaccess mojej aplikacji. Jest on następnie łatwo dostępny z dowolnego skryptu php za pomocą getenv ('APPLICATION_ENVIRONMENT').

Na serwerze produkcyjnym, na sharedhost (dreamhost), skompilowałem się php5.3.1, ponieważ nie było to bezpośrednio obsługiwane. Wszystko działa dobrze, z wyjątkiem tego, że getenv ('APPLICATION_ENVIRONMENT') zwraca wartość false.

w korzeniu .htaccess sharedhost dla mojej domeny używam tego pliku .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 rezyduje w/cgi-bin i działa bardzo dobrze. oczywiście w folderze głównym mojej aplikacji mam innego zdefiniowania .htaccess:

SetEnv APPLICATION_ENVIRONMENT production 

Ale podczas korzystania getenv („APPLICATION_ENVIRONMENT”) zwraca false, jakiś pomysł jak rozwiązać ten problem?

+0

Po prostu zgaduję: może twój host nie pozwala na nadpisanie tej dyrektywy w plikach .htaccess? –

Odpowiedz

11

OK W końcu to dostałem. Na dreamhostach można użyć fastcgi, a tym samym zadeklarować za pomocą zmiennych środowiskowych. Składa się on z prostego dodania tego prostego skryptu:

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

To gdzie znajdował się mój skompilowany PHP5.3.1. chmod 744 na tym pliku o nazwie dispatch.fcgi, które będzie mieć więcej pamięci przez watchdog dreamhosta.

Potem dodałem do mojej domeny .htaccess następujące:

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

teraz w katalogu głównym aplikacji mam inny .htaccess z:

SetEnv APPLICATION_ENVIRONMENT staging 

W skrypcie PHP jest odzyskiwane poprzez getenv ("REDIRECT_APPLICATION_ENVIRONMENT");

+0

oh dziękuję !!! Traciłem włosy próbując ustawić zmienną środowiskową w .htaccess. W końcu udało mi się to zrobić, zmieniając PHP z działającego jako aplikacja CGI na FastCGI. –

+5

Dlaczego używasz getenv ("REDIRECT_APPLICATION_ENVIRONMENT") zamiast getenv ("APPLICATION_ENVIRONMENT")? –

+0

Aby to działało, musiałem odejść od poprzedniej części "REDIRECT_" zmiennej środowiskowej. –

9

Dla dyrektywa SetEnv do pracy, usługa hosting musi mieć moduł mod_env aktywna ...

Ale, nawet jeśli jest włączona, może nie trzeba pozwolenie na używanie SetEnv.

Aby upewnić się, że problemu nie ma w kodzie, możesz sprawdzić wynik na phpinfo(): u dołu strony powinna znajdować się sekcja zawierająca zmienne środowiskowe widziane z PHP - jeśli twoja jest nie tam, to nie jest dobry znak dla ciebie ...

+0

Tak, masz rację, nie znajduję niczego pod zmiennymi PHP pod serwerem produkcyjnym i robię to na mojej maszynie programistycznej. Kontaktuję się z ich wsparciem i postaram się udzielić obejścia. –

+0

@Steven: Powodzenia ^^ –

Powiązane problemy