PHP exec调用中的重定向创建空文件

时间:2013-04-18 08:22:40

标签: php shell io-redirection

这很简单,而且我没有想法。我确信有一个快速的解决方法。

exec('echo 123 &> /var/log/123.log');

我确定它与权限无关,因为创建了文件123.log,但它只是空的。我也试过shell_exec,但它根本不创建文件。 还尝试了所有重定向变体,即1> 2> >

使用PHP捕获输出不是选项,因为生产中的输出很大,我不想遇到内存问题。

任何想法都赞赏。

是的,我正在使用Ubuntu 12.04 LAMP。

3 个答案:

答案 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_exec
echo 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)。