使用php shell_exec()输出内容到文本文件

3

我正在尝试在我的Centos计算机上运行rate -c 192.168.122.0/24命令,并使用shell_exec('rate -c 192.168.122.0/24')命令将该命令的输出写入文本文件; 但是一直没有成功!


你确定 rate 命令存在吗?它在命令行上能用吗? - mario
请问您在运行该命令后在终端中得到了什么输出? - Matthieu Napoli
4个回答

3
你可以通过PHP获取输出,然后将其保存到文本文件中。
    $output = shell_exec('rate -c 192.168.122.0/24');
    $fh = fopen('output.txt','w');
    fwrite($fh,$output);
    fclose($fh);

伙计,没什么运气,没有任何文本写入到文件中。 - Roshan Wijesena

3
如果您不需要PHP,可以在shell中直接运行:
rate -c 192.168.122.0/24 > file.txt

如果你需要从PHP运行它:

shell_exec('rate -c 192.168.122.0/24 > file.txt');

"

">"字符将命令的输出重定向到文件。

"

如果您自己运行该命令,是否会得到输出?无论是带有"> file.txt"还是不带。如果文本文件为空,那么这很奇怪,这意味着该命令没有打印任何结果。 - Matthieu Napoli
谢谢您的回复。是的,当我在终端中运行命令时,我可以获得输出,它是一个不断输出的流。 - Roshan Wijesena
@Roshan:你遇到了“权限问题”吗?尝试在上述命令行中添加2>&1。我怀疑你是否可以从php运行任意命令。 - Salman A
@Salman,文件权限没有问题,我可以轻松地将ls -l的输出写入文本文件。 - Roshan Wijesena
@Roshan:这可能仍然是一个权限问题,ls命令的权限可能与rate命令不同。你尝试将标准错误重定向到文本文件了吗? - Salman A
如果这是一个无限输出的结果,那就正常了。我会尝试另一个答案。 - Matthieu Napoli

2

由于您没有提到,您的命令提供了一个无限输出流。要实时读取输出,需要使用popen

PHP官网上的示例:

$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);

您可以像读取文件一样读取进程输出。


0
$path_to_file = 'path/to/your/file';
$write_command = 'rate -c 192.168.122.0/24 >> '.$path_to_file;
shell_exec($write_command);

希望这可以帮到你。:D 这将引导您找到一种好方法。https://unix.stackexchange.com/a/127529/41966


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接