15

Potrzebuję uruchomić skrypt PHP z wiersza poleceń i muszę ustawić niektóre zmienne środowiskowe. Niestety, po nie działa:Ustawianie zmiennej środowiskowej PHP przy uruchomionym skrypcie wiersza poleceń

php -dAPPLICATION_ENV=staging script.php 

Co chciałbym osiągnąć to mając APPLICATION_ENV zmienny.

+0

jest przestrzeń pomiędzy -d i APPLICATION_ENV literówka ? Spróbuj umieścić putenv ("APPLICATION_ENV = inscenizacja"); in script.php – Tdelang

+0

Czy chcesz ustawić niektóre zmienne w skrypcie lub uzyskać dostęp do zmiennej środowiskowej z poziomu skryptu? Jeśli to drugie, z jakiego kodu korzystałeś, aby uzyskać do niego dostęp? – DaveRandom

+0

W zmiennej skryptowej jest pobierana z funkcją 'getenv()'. – Wiktor

Odpowiedz

21
APPLICATION_ENV=staging php script.php 

Zmienna będą dostępne w tablicy $ _SERVER:

echo $_SERVER['APPLICATION_ENV']; 
5

Podczas wykonywania skryptu PHP z wiersza poleceń, dziedziczy zmienne środowiskowe zdefiniowane w swojej skorupie. Oznacza to, że można ustawić zmienną środowiskową za pomocą polecenia export tak:

export APPLICATION_ENV='staging' 
+0

Wiem, po prostu nie chcę zmieniać skryptu. – Wiktor

+0

Zobacz edytowaną odpowiedź ... – ciruvan

8

Nie ma sposobu, aby ustawić zmienne środowiskowe z linii poleceń specjalnie dla realizacji scenariusza przekazując opcje binarnego PHP.

Masz kilka opcji:

  1. ustawić zmienną globalnie w systemie.
  2. Ustaw zmienną w wierszu poleceń przed wywołaniem skryptu. Będzie to utrzymywać się w środowisku po zakończeniu wykonywania skryptu, czego możesz nie chcieć.
  3. Zawiń skrypt PHP w innym skrypcie, umożliwiając utworzenie tymczasowej zmiennej, która istnieje tylko przez czas trwania skryptu.
  4. Użyj opcji wiersza poleceń zamiast zmiennej środowiskowej.

Dwie ostatnie opcje są prawdopodobnie najczystszym sposobem zrobienia tego, ponieważ utworzona zmienna istnieje tylko dla czasu wykonywania skryptu.

Realizacja opcji 1 zależy od systemu.

Wdrożenie opcji 2 zależy również od systemu - w systemie Windows można wykonać set APPLICATION_ENV=staging&& php script.php, a na * nix będzie to export APPLICATION_ENV='staging' && php script.php.

Jeśli wybierzesz opcję 3, możesz mieć ochotę na skrypt powłoki, ale to nie jest przenośne (potrzebujesz pliku wsadowego dla systemu Windows i skryptu powłoki dla środowisk * nix. d proponuję napisać prosty skrypt PHP otoki, coś takiego:.

<?php 

    putenv('APPLICATION_ENV=staging'); 

    include('script.php'); 

to pozwala opuścić swój skrypt docelową na niezmienionym poziomie i ustawić zmienną środowiskową dla sesji skryptu tylko

bardziej skomplikowany skrypt otoki można łatwo utworzyć, co pozwoliłoby określić zmienne w wierszu poleceń, a nawet dynamicznie określić skrypt t które powinno zostać wykonane po ustawieniu tych zmiennych.

Wariant 4 może być realizowane za pomocą zmiennej :

<?php 

    $applicationEnv = $argv[1]; 

    // rest of you script 

...i wywołać skrypt jak:

php script.php staging 

Jednak wydaje mi się, że to wydaje się być wskazaniem do skryptu, który środowisko jest uruchomiony w (inscenizacja, dev, na żywo, etc) - w takim przypadku może być najprościej ustawić zmienną dla całego serwera i zmienić jej nazwę, aby zapobiec kolizji ze zmiennymi, które mogą ustawiać inne aplikacje. W ten sposób możesz po prostu wywołać skrypt i nie musisz się tym martwić. Zakłada się, że środowisko pomostowe działa na innej maszynie niż na żywo (co powinno być).

2

Spróbuj użyć putenv i przechodzą przez zmienne parametry

php script.php APPLICATION_ENV=staging 

I w kodzie script.php:

for($i=1;$i<count($argv);$i++){ 
    putenv($argv[$i]); 
} 
5

Można ustawić zmienną w /etc/environment jak FOO="bar" który jest następnie dostępny z getenv() w obu żądaniach CLI i internetowych. Aby zmiana zaczęła obowiązywać, może być konieczne ponowne zalogowanie.

+0

+1 Dla "Może być konieczne ponowne zalogowanie [w], aby zmiana zaczęła obowiązywać". Uderzyłem głową o ścianę, zastanawiając się, dlaczego rzeczy w moim '/ etc/environment' nie działają, dopóki nie zobaczyłem tego komentarza. –

1

mam taką samą sytuację i użyć kolejnego kodu (działa dla mnie):

export APPLICATION_ENV=staging && php script.php 

Nadzieję, że będą pomocne dla Ciebie.

3

Oto przykład ustawiania jeden envirnnomental zmiennej:

ENV_VAR='var' php script.php 

Tylko w przypadku, gdy chcesz ustawić wiele zmiennych Spróbuj tego:

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php