这很简单,而且我没有想法。我确信有一个快速的解决方法。
exec('echo 123 &> /var/log/123.log');
我确定它与权限无关,因为创建了文件123.log,但它只是空的。我也试过shell_exec,但它根本不创建文件。
还尝试了所有重定向变体,即1> 2> >
。
使用PHP捕获输出不是选项,因为生产中的输出很大,我不想遇到内存问题。
任何想法都赞赏。
是的,我正在使用Ubuntu 12.04 LAMP。答案 0 :(得分:1)
基于Debian和Debian的Linux发行版如Ubuntu现在使用dash而不是bash作为/ bin / sh。
&>
是一个bash扩展名,破折号不知道。
正确的与posix兼容的写cmd &> file
方式是cmd > file 2>&1
cmd > file 2>&1
适用于所有与posix兼容的shell:dash,bash,ksh,zsh,ash ......
因此您需要将代码更改为:
exec('echo 123 > /var/log/123.log 2>&1');
答案 1 :(得分:0)
在没有&:
的情况下尝试shell_exececho shell_exec("echo 123 > /var/log/123.log");
答案 2 :(得分:0)
唯一有帮助的是创建一个具有exec权限的shell脚本,例如: test.sh:
#!/bin/bash
echo 123 &>> /var/log/123.log
并执行它:
shell_exec('[full path to]/test.sh');
因此,重定向运算符并不重要,但其他一切都是(#!directive,shell_exec)。