繁体   English   中英

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

[英]Environment variable set by putenv() are not present while running a shell script using shell_exec() | PHP

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

我的PHP脚本是这样的:

<?php
...
...
putenv("USERHOME=/home/user/mnt");
...
...
shell_exec("sudo ./script.sh arg1 arg2");
...
...
?>

我的shell脚本是这样的:

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

我正在为我的应用程序使用Xampp,PHP版本是5.3.8。

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

在PHP <5.4中,有一个safe_mode指令来限制可以使用putenv编写的环境变量。 编辑您的php.ini文件, USERHOMEsafe_mode_protected_env_vars设置中删除USERHOME

http://php.net/manual/zh/ini.sect.safe-mode.php#ini.safe-mode-protected-env-vars

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

首先,我是PHP的新手,这里也是。 我在发布时错过了一些有问题的东西。 现在,我已经编辑了问题,并正确提供了所有必需的详细信息和脚本内容。

根本原因和解决方法:

在我的PHP脚本中,我通过shell_exec()运行shell脚本,并在命令shell_exec("sudo ./script.sh arg1 arg2");使用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上按预期运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM