web-dev-qa-db-fra.com

Définition de la variable d'environnement PHP lors de l'exécution du script de ligne de commande

J'ai besoin d'exécuter un script PHP à partir de la ligne de commande et je dois définir certaines variables environnementales. Malheureusement, ce qui suit ne fonctionne pas:

php -dAPPLICATION_ENV=staging script.php

Ce que j'aimerais accomplir, c'est d'avoir APPLICATION_ENV ensemble de variables.

23
Wiktor
APPLICATION_ENV=staging php script.php

La variable sera disponible dans le tableau $ _SERVER:

echo $_SERVER['APPLICATION_ENV'];
30
Marek

Il n'y a aucun moyen de définir des variables d'environnement à partir de la ligne de commande spécifiquement pour l'exécution d'un script en passant des options au binaire PHP.

Vous avez quelques options:

  1. Définissez la variable globalement sur le système.
  2. Définissez la variable sur la ligne de commande avant d'appeler le script. Cela persistera dans l'environnement une fois l'exécution de votre script terminée, ce que vous ne voudrez peut-être pas.
  3. Enveloppez le script PHP dans un autre script, vous permettant de créer une variable temporaire qui n'existe que pour la durée du script.
  4. Utilisez une option de ligne de commande au lieu d'une variable d'environnement.

Les deux dernières options sont probablement la façon la plus simple de le faire, dans la mesure où la variable créée n'existe que pour le temps d'exécution de votre script.

La mise en œuvre de l'option 1 dépend du système.

L'implémentation de l'option 2 dépend également du système - sous Windows, vous feriez set APPLICATION_ENV=staging&& php script.php et sur * nix ce serait export APPLICATION_ENV='staging' && php script.php.

Si vous deviez opter pour l'option 3, vous pourriez être tenté d'opter pour un script Shell, mais ce n'est pas portable (vous auriez besoin d'un fichier de commandes pour Windows et d'un script Shell pour les environnements * nix. Au lieu de cela, je vous suggère d'écrire un simple script wrapper PHP, quelque chose comme ceci:

<?php

    putenv('APPLICATION_ENV=staging');

    include('script.php');

Cela vous permet de laisser votre script cible inchangé et de définir la variable d'environnement pour la session du script uniquement.

Un script wrapper plus complexe pourrait facilement être créé, ce qui vous permettrait de spécifier des variables sur la ligne de commande, et même de spécifier dynamiquement le script qui devrait être exécuté lorsque ces variables sont définies.

L'option 4 peut être implémentée à l'aide de $argv variable:

<?php

    $applicationEnv = $argv[1];

    // rest of you script

... et appelez le script comme:

php script.php staging

Cependant, il me semble que vous semblez indiquer au script dans quel environnement s'exécute (staging, dev, live, etc.) - auquel cas il pourrait être plus simple de définir une variable à l'échelle du serveur et de la renommer si nécessaire pour éviter la collision avec des variables que d'autres applications peuvent définir. De cette façon, vous pouvez simplement invoquer le script sans avoir à vous en préoccuper. Cela suppose que votre environnement de transfert s'exécute sur une machine différente de celle en direct (ce qu'il devrait être).

13
DaveRandom

Lorsque vous exécutez un script PHP à partir de la ligne de commande, il hérite des variables d'environnement définies dans votre shell. Cela signifie que vous pouvez définir une variable d'environnement à l'aide de la commande d'exportation comme suit:

export APPLICATION_ENV='staging'
10
ciruvan

Voici un exemple pour définir une variable environnementale:

ENV_VAR='var' php script.php 

Juste au cas où vous souhaitez définir plusieurs variables Essayez ceci:

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php 
8
Abdou Tahiri

Vous pouvez définir une variable dans /etc/environment comme FOO="bar" qui est ensuite accessible avec getenv () dans les requêtes CLI et web. Vous devrez peut-être vous reconnecter pour que cette modification prenne effet.

6
Westwick

Essayez d'utiliser putenv et passez les variables à travers les paramètres

php script.php APPLICATION_ENV=staging

Et dans le code script.php:

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

J'ai la même situation et j'utilise le code suivant (cela fonctionne pour moi):

export APPLICATION_ENV=staging && php script.php

J'espère que cela vous sera utile aussi.

1
V. Kovpak