这很简单,我没有想法。我确信有一个快速的解决方法。
exec('echo 123 &> /var/log/123.log');
我确定这与权限无关,因为文件 123.log 已创建,但它只是空的。我也尝试过 shell_exec,但它根本不创建文件。还尝试了所有重定向变体,即1> 2> >
.
使用 PHP 捕获输出不是选项,因为生产中的输出很大,我不想遇到内存问题。
任何想法表示赞赏。
顺便说一句,我使用的是 Ubuntu 12.04 LAMP。
这很简单,我没有想法。我确信有一个快速的解决方法。
exec('echo 123 &> /var/log/123.log');
我确定这与权限无关,因为文件 123.log 已创建,但它只是空的。我也尝试过 shell_exec,但它根本不创建文件。还尝试了所有重定向变体,即1> 2> >
.
使用 PHP 捕获输出不是选项,因为生产中的输出很大,我不想遇到内存问题。
任何想法表示赞赏。
顺便说一句,我使用的是 Ubuntu 12.04 LAMP。
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');
尝试不带 & 的 shell_exec:
echo shell_exec("echo 123 > /var/log/123.log");
唯一有用的是创建一个具有 exec 权限的 shell 脚本,例如 test.sh:
#!/bin/bash
echo 123 &>> /var/log/123.log
并像这样执行它:
shell_exec('[full path to]/test.sh');
因此,重定向运算符并不重要,但其他一切都是(#!指令,shell_exec)。