【问题标题】:php shell_exec() out put to get a text filephp shell_exec() 输出获取文本文件
【发布时间】:2011-08-08 14:44:06
【问题描述】:

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

【问题讨论】:

  • 您确定rate 命令存在吗?它可以在命令行上运行吗?
  • 你能告诉我们你在运行命令后在终端中得到了什么吗?

标签: php command-line exec shell-exec


【解决方案1】:

如果你不需要 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”。如果文本文件为空,这很奇怪,这意味着该命令不会打印任何结果。
  • 感谢您的回复。是的,我可以在终端运行命令时得到输出
  • @Roshan:你遇到“权限问题”了吗?尝试将2>&1 添加到上述命令行。我怀疑你是否可以从 php 运行任意命令。
  • @Salman 文件权限没有问题我可以轻松地从 ls -l 中取出文本文件..
  • @Roshan:仍然可能是权限问题,与 rate 命令相比,ls 命令可能具有不同的权限。您是否尝试将标准错误重定向到文本文件?
【解决方案2】:

也可以通过 PHP 获取输出,然后保存到文本文件中

    $output = shell_exec('rate -c 192.168.122.0/24');
    $fh = fopen('output.txt','w');
    fwrite($fh,$output);
    fclose($fh);

【讨论】:

  • 不走运,哥们什么都没有写入文本文件
【解决方案3】:

正如您忘记提及的,您的命令提供了一个非结束输出流。要实时读取输出,需要使用popen

来自 PHP 网站的示例:

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

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

【讨论】:

  • 是的,这很好,非常感谢你的帮助,非常感谢。
【解决方案4】:
$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多