我试图重定向shell命令的输出,如下所示:
# echo here > /tmp/output我需要在apache使用exec()函数执行的PHP脚本中执行此操作:
var_dump(exec('echo here > /tmp/output')); // string (0) "", no file created上面的命令不创建文件,返回的退出代码为0。
我可以验证PHP能够使用exec执行命令,如下所示:
var_dump(exec('echo here')); // string(4) "here"我尝试在php shell中以apache用户的身份执行这段代码,它的工作原理是:
# 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上运行很好。
任何帮助都是非常感谢的!
发布于 2017-10-05 17:07:53
我解决了我的问题。问题是apache被配置为使用私有临时目录:
PrivateTmp=采用布尔参数。如果为true,则为已执行的进程设置一个新的文件系统命名空间,并在其中挂载私有/tmp和/var/tmp目录,这些目录不是由名称空间外的进程共享的。这对于保护对进程临时文件的访问非常有用,但使得进程之间无法通过/tmp或/var/tmp共享。服务停止后,所有由服务创建的临时数据都将被删除。默认为false。
结果,我找错了脚本输出的位置。
https://stackoverflow.com/questions/44768521
复制相似问题