我试图重定向壳命令的输出,例如:
# 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。
因此,我正在寻找脚本输出的错误位置。