使用PHP的exec()函数

时间:2017-06-26 20:54:26

标签: php linux apache shell

我正在尝试重定向shell命令的输出,如下所示:

# echo here > /tmp/output

我需要使用exec()函数从apache执行的PHP脚本中执行此操作:

var_dump(exec('echo here > /tmp/output'));  // string (0) "", no file created

上述命令不会创建文件并返回退出代码为0。

我可以验证PHP是否能够使用exec执行命令,如下所示:

var_dump(exec('echo here'));  // string(4) "here"

我尝试从作为apache用户运行的php shell中执行此代码,并且它可以工作:

# su -s /bin/bash -c 'php -a' apache
php > var_dump(exec('echo here > /tmp/output'));  // file is created

我尝试重定向stderr以及stdout:

var_dump(exec('echo here 2>&1 /tmp/output'));  // string(0) "", no file created

最后,我尝试将stderr从整个命令重定向回exec():

var_dump(exec('echo here > /tmp/output 2>&1')); // string(0) "", no file created

基于上面的步骤,在我看来,问题必须与apache调用php有关,因为它可以作为apache用户从php shell运行良好。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我想出了我的问题。问题是apache被配置为使用私有临时目录:

  

PrivateTmp =采用布尔参数。如果为true,则设置新文件   已执行进程的系统命名空间,并挂载private / tmp   其中的/ var / tmp目录,不由进程共享   在命名空间之外。这对于安全访问非常有用   进程的临时文件,但在进程之间进行共享   通过/ tmp或/ var / tmp是不可能的。服务创建的所有临时数据   服务停止后将被删除。默认为false。

结果我在错误的位置查找我的脚本输出。