gpt4 book ai didi

php - 从命令行执行脚本时,即使使用 ob_start() 也会将输出打印到终端

转载 作者:可可西里 更新时间:2023-11-01 00:23:26 26 4
gpt4 key购买 nike

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

#!/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()
);

template.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 环境中关闭输出缓冲区?

最佳答案

我认为您需要 ob_get_clean() 而不是 ob_get_flush():

ob_get_clean :

ob_get_clean — Get current buffer contents and delete current output buffer

ob_get_flush :

ob_get_flush — Flush the output buffer, return it as a string and turn off output buffering

在这种情况下,“刷新”意味着“发送到标准输出”。

file_put_contents(
__DIR__ . '/' . str_replace('.md', '.html', $argv[1]),
ob_get_clean()
);

关于php - 从命令行执行脚本时,即使使用 ob_start() 也会将输出打印到终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com