putenv () не может установить переменную окружения для родительской командной строки - PullRequest
0 голосов
/ 05 ноября 2019

Мне нужно установить переменную окружения с помощью php и получить доступ к ним из Windows cmd. Из cmd я вызываю php с call php\php.exe install.php 0, тогда install.php установит некоторую переменную окружения. когда выполнение install.php закончено, я попытался получить эти переменные из родительского cmd. Но cmd не может получить эти значения.

вот мой install.php:

<?php
$config = json_decode(file_get_contents('tmp/config.json'), true);
foreach ($config[$argv[1]] as $segment=>$details){
    putenv("targetFolder=$segment");
    putenv("targetLink=$details[link]");
}
echo getenv('targetFolder');

вот результат:

cmd output

%targetFolder% должен вернуть servers

1 Ответ

1 голос
/ 05 ноября 2019

С помощью setenv вы можете установить переменные для текущего процесса, а cmd.exe - это другой родительский элемент. Вы не можете изменить env родительского процесса без хаков. Вам, вероятно, следует переписать скрипт, чтобы поместить необходимые set ENV=VALUE строки во временный пакетный файл, а затем вызвать его.

<?php
$config = json_decode(file_get_contents('tmp/config.json'), true);
$tmpBatch = fopen('tmp/setenv.bat', 'w');
foreach ($config[$argv[1]] as $segment=>$details){
    fwrite($tmpBatch, "set targetFolder=$segment");
    fwrite($tmpBatch, "set targetLink=$details[link]");
}
fclose($tmpBatch);

И затем

php\php.exe install.php
call tmp\setenv.bat
...