使用 PHP 的 exec() 函数重定向 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有关,因为它可以从PHP Shell作为Apache用户运行正常。

任何帮助都非常感谢!

我弄清楚了我的问题。问题是Apache配置为使用私有临时目录:

privatetmp =采用布尔参数。如果为true,请设置一个新文件 执行过程的系统名称空间和安装私有/TMP 和/var/tmp目录,这些目录并未由进程共享 在命名空间之外。这对于确保访问访问很有用 该过程的临时文件,但可以在过程之间共享 通过/TMP或/var/tmp不可能。服务创建的所有临时数据 服务停止后将删除。默认为false。

因此,我正在寻找脚本输出的错误位置。

最新更新