2010-01-04 6 views
5

J'essaie de définir une variable qui devrait être accessible depuis l'extérieur de PHP. Idéalement, cela devrait être une variable locale, mais les variables d'environnement sont également les bienvenues.Exporter une variable de PHP à shell

D'abord, je l'ai essayé putenv(), mais cela ne donne aucun résultat:

$ php -r "putenv ('PHP_TEST = string');" ; echo $ PHP_TEST

$

Quand j'appelle getenv() du même script - il en résulte la bonne valeur 'string'. mode sans échec est désactivé, mais le manuel dit préfixe « PHP_ » est vital avec sécurité = sur donc je l'utilise juste au cas où :)

J'essaie system() ou shell_exec():

$ php -r "shell_exec ('PHP_TEST = chaîne');" ; echo $ PHP_TEST

$ php -r "shell_exec ('export PHP_TEST = chaîne');" ; echo $ PHP_TEST

$

est-il une solution? quelle pourrait être la raison? J'utilise Ubuntu Linux 9.10 "Karmic", mais le serveur FreeBSD donne le même résultat.

Répondre

3

Si vous essayez de passer une sortie à une variable shell, vous pouvez le faire comme ceci:

$ testvar=$(php -r 'print "hello"') 
$ echo $testvar 
hello 

Montrer comment l'exportation affecte les choses:

$ php -r '$a=getenv("testvar"); print $a;' 
$ export testvar 
$ php -r '$a=getenv("testvar"); print $a;' 
hello 

Dans ces exemples, les shell interactif est le processus parent et tout le reste est un enfant (et les frères et soeurs l'un de l'autre).

+0

Merci! Cela rend la question claire. Mais alors, comment 'getopt' (et d'autres programmes non intégrés) parviennent à exporter des variables dans le contexte externe? (Par exemple 'getopt' exporte' $ OPTIND') – kolypto

+0

Vous confondez l'externe '/ usr/bin/getopt' qui ne le fait pas et ne peut pas le faire avec le' getopts' intégré qui le fait. –

2

Les variables d'environnement exportées sont uniquement disponibles dans les processus enfants.

Ainsi, vous serez en mesure de définir une variable d'environnement, puis de générer un processus enfant. La variable d'environnement sera visible dans ce processus enfant. Cependant le réglage dans php, puis le lancement d'un processus successifs (echo, dans votre exemple ci-dessus) ne fonctionnera pas.

Si vous définissez la variable, puis générez/exécutez un nouveau processus, il doit être visible dans ce nouveau processus.

Questions connexes