15

Ho bisogno di eseguire uno script PHP da riga di comando e ho bisogno di impostare alcune variabili ambientali. Purtroppo, in seguito non funziona:Impostazione della variabile ambientale PHP durante l'esecuzione dello script da riga di comando

php -dAPPLICATION_ENV=staging script.php 

Quello che mi piacerebbe realizzare è avere APPLICATION_ENV variabile impostata.

+0

è lo spazio tra -d e APPLICATION_ENV un errore di battitura ? Prova a mettere putenv ("APPLICATION_ENV = staging"); in script.php – Tdelang

+0

È necessario impostare alcune variabili all'interno dello script o accedere a una variabile di ambiente all'interno dello script? Se quest'ultimo, quale codice stavi usando per accedervi? – DaveRandom

+0

Nella variabile di script viene richiamata la funzione 'getenv()'. – Wiktor

risposta

21
APPLICATION_ENV=staging php script.php 

La variabile sarà disponibile nella matrice $ _SERVER:

echo $_SERVER['APPLICATION_ENV']; 
5

Quando si esegue uno script PHP da linea di comando, eredita le variabili d'ambiente definite nella shell. Ciò significa che è possibile impostare una variabile d'ambiente con il comando di esportazione in questo modo:

export APPLICATION_ENV='staging' 
+0

Lo so, non voglio modificare lo script comunque. – Wiktor

+0

Vedere la risposta modificata ... – ciruvan

8

Non v'è alcun modo per impostare le variabili d'ambiente dalla riga di comando specifico per l'esecuzione di uno script dal passaggio delle opzioni al binario PHP.

avete alcune opzioni:

  1. Impostare la variabile a livello globale sul sistema.
  2. Impostare la variabile sulla riga di comando prima di chiamare lo script. Questo persisterà nell'ambiente al termine dell'esecuzione dello script, cosa che potresti non volere.
  3. Avvolgi lo script PHP in un altro script, consentendoti di creare una variabile temporanea che esiste solo per la durata dello script.
  4. Utilizzare un'opzione della riga di comando anziché una variabile di ambiente.

Le ultime due opzioni sono probabilmente il modo più semplice per eseguire questa operazione, in quanto la variabile creata esiste solo per il tempo di esecuzione dello script.

L'implementazione dell'opzione 1 dipende dal sistema.

Anche l'implementazione dell'opzione 2 dipende dal sistema: su Windows si farebbe set APPLICATION_ENV=staging&& php script.php e su * nix sarebbe export APPLICATION_ENV='staging' && php script.php.

Se dovessi optare per l'opzione 3, potresti essere tentato di utilizzare uno script di shell, ma questo non è portabile (ti occorrerebbe un file batch per Windows e uno script di shell per gli ambienti * nix. d suggerisco di scrivere un semplice script PHP involucro, qualcosa di simile a questo:.

<?php 

    putenv('APPLICATION_ENV=staging'); 

    include('script.php'); 

questo permette di lasciare lo script di destinazione invariato e impostare la variabile d'ambiente per la sessione dello script solo

uno script wrapper più complessa potrebbe essere facilmente creato che ti consentirebbe di specificare variabili sulla riga di comando e persino di specificare in modo dinamico lo scrip t che dovrebbe essere eseguito quando queste variabili sono impostate.

Opzione 4 può essere implementato usando la variabile :

<?php 

    $applicationEnv = $argv[1]; 

    // rest of you script 

...e chiamare lo script come:

php script.php staging 

Tuttavia, mi viene in mente che ti sembra di essere che indica allo script quale ambiente è in esecuzione in (messa in scena, dev, dal vivo, ecc) - nel qual caso potrebbe essere più semplice impostare una variabile a livello di server e rinominarlo come necessario per evitare la collisione con le variabili che potrebbero essere impostate da altre applicazioni. In questo modo puoi semplicemente invocare lo script e non devi preoccuparti di questo. Questo presuppone che l'ambiente di staging venga eseguito su un altro computer sul live (quale dovrebbe essere).

2

Provare a utilizzare putenv e passare le variabili attraverso parametri

php script.php APPLICATION_ENV=staging 

E nel codice script.php:

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

È possibile impostare una variabile in /etc/environment come FOO="bar" che è quindi accessibile con getenv() in entrambe le richieste CLI e web. Potrebbe essere necessario il relog perché questa modifica abbia effetto.

+0

+1 Per "Potrebbe essere necessario relog [in] affinché questa modifica abbia effetto". Ho battuto la mia testa contro un muro chiedendomi perché le cose nel mio '/ etc/environment' non funzionassero, finché non ho visto questo commento. –

1

ho la stessa situazione e io uso codice successivo (che funziona per me):

export APPLICATION_ENV=staging && php script.php 

spero che utile anche per voi.

3

Ecco un esempio per impostare una variabile envirnnomental:

ENV_VAR='var' php script.php 

Solo nel caso in cui si desidera impostare più variabili Prova questa:

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