Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用shell_exec()| PHP运行shell脚本时,不存在由putenv()设置的环境变量_Php_Linux_Bash_Shell - Fatal编程技术网

使用shell_exec()| PHP运行shell脚本时,不存在由putenv()设置的环境变量

使用shell_exec()| PHP运行shell脚本时,不存在由putenv()设置的环境变量,php,linux,bash,shell,Php,Linux,Bash,Shell,我有一个PHP脚本,其中我使用putenv()设置一个环境变量,然后在此PHP脚本中使用shell\u exec()调用一个shell脚本。 在shell脚本中,我试图使用该环境变量 我的PHP脚本如下: #!/bin/sh ... ... echo "USER HOME=" $USERHOME ... <---Another use of $USERHOME-----> ... exit $? 我的shell脚本类似于: #!/bin/sh ... ... echo "USE

我有一个PHP脚本,其中我使用
putenv()
设置一个环境变量,然后在此PHP脚本中使用
shell\u exec()
调用一个shell脚本。 在shell脚本中,我试图使用该环境变量

我的PHP脚本如下:

#!/bin/sh
...
...
echo "USER HOME=" $USERHOME
...
<---Another use of $USERHOME----->
...
exit $?

我的shell脚本类似于:

#!/bin/sh
...
...
echo "USER HOME=" $USERHOME
...
<---Another use of $USERHOME----->
...
exit $?
#/垃圾箱/垃圾箱
...
...
echo“USER HOME=“$USERHOME
...
...
退出$?
我的应用程序使用Xampp,PHP版本是5.3.8

以前它在fedora core 3上运行良好。 但是最近我把我的应用程序移到了CentOS 7,现在它不工作了。
在CentOS 7上,我得到了USERHOME变量的空值。

在PHP<5.4中有一个安全模式指令,它限制了可以使用
putenv
编写的环境变量。编辑php.ini文件并从
safe\u mode\u protected\u env\u vars
设置中删除
USERHOME


在PHP<5.4中,有一个安全模式指令,用于限制可以使用
putenv
编写的环境变量。编辑php.ini文件并从
safe\u mode\u protected\u env\u vars
设置中删除
USERHOME


经过一些研究和调试,我能够在我的shell脚本中获得环境变量的正确值,它是由我的PHP脚本中的putenv()设置的

首先,我对PHP和这里都是新手。我在发帖时遗漏了一些问题。现在我已经编辑了我的问题,并正确地提供了所有必需的细节和脚本内容

根本原因和解决方案:

#!/bin/sh
...
...
echo "USER HOME=" $USERHOME
...
<---Another use of $USERHOME----->
...
exit $?
在我的PHP脚本中,我通过shell_exec()运行shell脚本,并在命令中使用sudo
shell_exec(“sudo./script.sh arg1 arg2”)
这个sudo是这里的主要问题

删除它并简单地调用脚本
shell_exec(“./script.sh arg1 arg2”)成功了

sudo的shell_exec()调用在Fedora Core 3上运行良好。
但当我将应用程序移动到CentOS 7时,它停止了工作。从命令中删除sudo后,它将按预期在CentOS 7上运行

经过一些研究和调试,我能够在我的shell脚本中获得环境变量的正确值,它是由我的PHP脚本中的putenv()设置的

首先,我对PHP和这里都是新手。我在发帖时遗漏了一些问题。现在我已经编辑了我的问题,并正确地提供了所有必需的细节和脚本内容

根本原因和解决方案:

#!/bin/sh
...
...
echo "USER HOME=" $USERHOME
...
<---Another use of $USERHOME----->
...
exit $?
在我的PHP脚本中,我通过shell_exec()运行shell脚本,并在命令中使用sudo
shell_exec(“sudo./script.sh arg1 arg2”)
这个sudo是这里的主要问题

删除它并简单地调用脚本
shell_exec(“./script.sh arg1 arg2”)成功了

sudo的shell_exec()调用在Fedora Core 3上运行良好。
但当我将应用程序移动到CentOS 7时,它停止了工作。从命令中删除sudo后,它将按预期在CentOS 7上运行

如果以这种方式运行
shell\u exec
命令,是否能够获得输出
shell\u exec(“USERHOME=/home/user/mnt./script.sh arg1 arg2”)
@anurupr No.我试过
shell\u exec(“USERHOME=/home/user/mnt./script.sh arg1 arg2”)
shell\u exec(“export USERHOME=/home/user/mnt./script.sh arg1 arg2”)
。但是相同的行为。是否将
shell\u exec
命令的输出存储在变量中?因为默认情况下浏览器不会打印它。e、 g.
$output=shell_exec(“./script.sh arg1 arg2”);echo$输出@anurupr是。但我不是在浏览器上打印,而是在日志文件中写入。我的PHP脚本能够运行shell脚本,但会获得putenv()设置的变量USERHOME的空值。您能显示日志文件的输出吗?如果以这种方式运行
shell\u exec
命令,您能获得输出吗
shell\u exec(“USERHOME=/home/user/mnt./script.sh arg1 arg2”)
@anurupr No.我试过
shell\u exec(“USERHOME=/home/user/mnt./script.sh arg1 arg2”)
shell\u exec(“export USERHOME=/home/user/mnt./script.sh arg1 arg2”)
。但是相同的行为。是否将
shell\u exec
命令的输出存储在变量中?因为默认情况下浏览器不会打印它。e、 g.
$output=shell_exec(“./script.sh arg1 arg2”);echo$输出@anurupr是。但我不是在浏览器上打印,而是在日志文件中写入。我的PHP脚本能够运行shell脚本,但会获得putenv()设置的变量USERHOME的空值。您能显示日志文件的输出吗?感谢您的指导和链接。我是PHP新手,不知道这一点。但我的问题不同。变量USERHOME是用户定义的环境变量。因此,它不存在于php.ini文件中,而且
安全模式\u受保护的\u环境\u变量
设置不适用于此。然而,经过一些研究和调试,我能够找出罪魁祸首。我正在写我的答案。谢谢:)谢谢你的指导和链接。我是PHP新手,不知道这一点。但我的问题不同。变量USERHOME是用户定义的环境变量。因此,它不存在于php.ini文件中,而且
安全模式\u受保护的\u环境\u变量
设置不适用于此。然而,经过一些研究和调试,我能够找出罪魁祸首。我正在写我的答案。谢谢:)