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.
APPLICATION_ENV=staging php script.php
La variable sera disponible dans le tableau $ _SERVER:
echo $_SERVER['APPLICATION_ENV'];
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:
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).
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'
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
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.
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]);
}
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.