全局环境变量不适用于在PHP中执行的bash命令

我正在尝试在从PHP内部执行的bash脚本中返回全局环境变量的值( 以sudo运行。</ p>

从bash脚本运行命令 printenv </ code>会显示未设置全局变量。 我知道sudo会重置环境。 </ p>

请考虑以下设置; </ p>

定义全局环境变量</ strong> </ p>

   root @ test:/ #export HEY = hello 
</ code> </ pre>

测试是否存在var </ strong> </ p>

< pre> root @ test:/#printenv | grep HEY
HEY = hello
</ code> </ pre>

请考虑这个PHP函数</ p>

PHP函数</ strong> </ p>

  function testAction(){

define('TEST_CMD','/ usr / bin / sudo / usr / local / test / bin /');
$ command ='bash_script';
$ query = TEST_CMD。$ command;

exec($ query,$ output,$ return_var);

var_dump($ output);
var_dump($ return_var); \ n echo exec('whoami');

}
</ code> </ pre>

/etc/sudoers.d/admin </ code的内容 > </ strong> </ p>

  admin ALL =(ALL)ALL 
admin ALL = NOPASSWD:/ usr / local / test / bin / *
</ code> </ pre>

/ usr / local / test / bin / bash_script的内容</ code> </ strong> </ p>

 #  !/ bin / bash 
printenv
echo $ HEY
exit
</ code> </ pre>

我试过把 Defaults env_keep + =“HEY”</ code>放在< 代码> /etc/sudoers.d/admin </ code>也是如此。但</ p>

操作系统是ubuntu 14.04 </ p>

有什么想法吗? </ p>
</ div>

展开原文

原文

I'm trying to return the value of a global environment variable inside a bash script which is executed from inside PHP (run as sudo).

Running the command printenv from the bash script reveals that the global variable is not set. I understand sudo resets the environment.

Please consider the following setup;

Define global environment var

root@test:/# export HEY=hello

Test existence of var

root@test:/# printenv | grep HEY
HEY=hello

Please consider this PHP function

PHP function

function testAction() {

    define('TEST_CMD', '/usr/bin/sudo /usr/local/test/bin/');
    $command = 'bash_script';
    $query = TEST_CMD.$command;

    exec ($query, $output, $return_var);

    var_dump( $output );
    var_dump( $return_var );
    echo exec('whoami');

}

Contents of /etc/sudoers.d/admin

admin   ALL=(ALL)       ALL
admin   ALL=NOPASSWD:/usr/local/test/bin/*

Contents of /usr/local/test/bin/bash_script

#!/bin/bash
printenv
echo $HEY
exit

I have tried putting Defaults env_keep +="HEY" inside /etc/sudoers.d/admin too but that doesn't appear to work either.

OS is ubuntu 14.04

Any ideas?

donglie7778
donglie7778 我确实对此感到疑惑,但是nginx和php都是从同一个init脚本启动的
接近 5 年之前 回复
doukan3504
doukan3504 因此导出仅对该init.d脚本及其子进程有效。因此,除非init.d脚本是nginx或php-fpm的脚本,或者正在运行运行脚本的php进程的脚本,它对您的脚本没有任何影响。是在这样的init.d脚本中吗?
接近 5 年之前 回复
donglian4464
donglian4464 导出HEY=hello是从在init.d调用中运行的脚本运行的
接近 5 年之前 回复
dtpn60029
dtpn60029 PHP代码正在通过浏览器运行(nginx+php-fpm)
接近 5 年之前 回复
duanpao4522
duanpao4522 HEY的价值应该来自哪里?你是否从运行导出HEY=hello的shell会话中运行php代码?出口不是魔术。除了当前进程(因此当前处理子进程)之外,它不会影响任何内容。
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐