3

我写了一个小命令行脚本来处理一个文档[一个带有 lilypond 乐谱插入的降价文件,只是为了完整起见]。

#!/usr/bin/env php
<?php    

$body = "";

...
// text gets processed here and stored in $body
...

ob_start();
include 'template.php';
file_put_contents(
    __DIR__ . '/' . str_replace('.md', '.html', $argv[1]),
    ob_get_flush() 
);

模板.php

<!DOCTYPE html>
<html lang="en">
<head>
  ...
</head>
<body>
  <div id="wrapper">
  <?php echo Markdown($body); ?>
  </div>
</body>
</html>

当我打电话时:

$ ./phlily source.md

文件生成正确,但模板内容也打印到控制台:

GNU LilyPond 2.14.2
Processing `/Users/.../phlily/ly/4add05a74d249f34b3875ef6c3c1d79763927960.ly'
Parsing...
Converting to PNG...
<!DOCTYPE html>
<html lang="en">
<head>
...
</html>

这很烦人,因为我想从 LilyPond 脚本中读取错误和警告,将它们埋在终端的 html 墙后面。

长话短说,是否可以在 CLI 环境中关闭输出缓冲区?

4

1 回答 1

7

我想你想要ob_get_clean()而不是ob_get_flush()

ob_get_clean

ob_get_clean — 获取当前缓冲区内容并删除当前输出缓冲区

ob_get_flush

ob_get_flush — 刷新输出缓冲区,将其作为字符串返回并关闭输出缓冲

在这种情况下,“flush”表示“发送到标准输出”。

file_put_contents(
    __DIR__ . '/' . str_replace('.md', '.html', $argv[1]),
    ob_get_clean() 
);
于 2012-08-26T19:32:20.287 回答