# ob_start

(PHP 4, PHP 5, PHP 7, PHP 8)

ob_start — 打开输出控制缓冲

### 说明

ob_start(?callable `$callback` = `null`, int `$chunk_size` = 0, int `$flags` = `PHP_OUTPUT_HANDLER_STDFLAGS`): bool

此函数将打开输出缓冲。当输出缓冲激活后，脚本将不会输出内容，相反需要输出的内容被存储在内部缓冲区中。参阅什么输出会被缓冲？以了解哪些输出受到影响。

输出缓冲区是可堆叠的，也就是说，当一个缓冲区处于活动状态时也可以调用 ob_start()。如果有多重输出缓冲区是活跃的，输出内容会一直按嵌套的顺序依次过滤。参阅嵌套输出缓冲区获取更多详情。

有关输出缓冲区的详细信息，请参阅用户级输出缓冲区

### 参数

`callback`

  可以指定可选的 `callback` callable。也可以通过传递 `null` 来绕过它。

  当冲刷（发送）、清理输出缓冲区或在脚本末尾冲刷输出缓冲区时，将调用 `callback`。

  `callback` 的签名如下：

  handler(string `$buffer`, int `$phase` = ?): string
  `buffer`
    输出缓冲区中的内容。
  `phase`
    `PHP_OUTPUT_HANDLER_*` 常量。`PHP_OUTPUT_HANDLER_*` 常量的位掩码。有关更多详细信息，请参阅传递给输出处理程序的 flag。

  如果 `callback` 返回 `false`，则返回缓冲区的内容。有关更多详细信息，请参阅 输出处理程序的返回值。

  警告

  从输出处理程序中调用以下任何函数都将导致 fatal 错误 ob_clean()、ob_end_clean()、ob_end_flush()、ob_flush()、ob_get_clean()、ob_get_flush()、ob_start()。

  有关 `callback`（输出处理程序）的更多详细信息，请参阅输出处理程序和使用输出处理程序。

`chunk_size`

  如果传递了可选参数 chunk_size，则在任何导致缓冲区长度等于或大于 `chunk_size` 的代码块的输出之后，都会冲刷缓冲区。默认值 `0` 表示缓冲所有输出，直到缓冲区关闭。更多详细信息，请参阅缓冲区大小。

`flags`

  `flags` 参数是位掩码，用于控制可以在输出缓冲区上执行的操作。默认是允许清理、冲刷和移除输出缓冲区，可以通过缓冲区控制 flag手动设置。参阅缓冲区中允许的操作获取更多详细信息。

  每个标志都控制着对一组功能的访问，详细介绍如下：

  常量 | 函数
  --- | ---
  `PHP_OUTPUT_HANDLER_CLEANABLE` | ob_clean()
  `PHP_OUTPUT_HANDLER_FLUSHABLE` | ob_flush()
  `PHP_OUTPUT_HANDLER_REMOVABLE` | ob_end_clean()、ob_end_flush()、ob_get_clean()、ob_get_flush()

  > 注意: 在 PHP 8.4.0 之前，flags 参数还可以设置 输出处理程序状态标志。

### 返回值

成功时返回 `true`， 或者在失败时返回 `false`。

### 示例

示例 #1 用户自定义回调函数的示例

`<?php
function callback($buffer)
{
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
?>`

以上示例会输出：

    <html>
    <body>
    <p>It's like comparing oranges to oranges.</p>
    </body>
    </html>

示例 #2 创建不可擦除的输出缓冲区

`<?php
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_REMOVABLE);
?>`

### 参见

- ob_get_contents() - 返回输出缓冲区的内容
- ob_end_clean() - 清空（擦除）活动缓冲区的内容并关闭它
- ob_end_flush() - 冲刷（发送）活动输出处理程序的返回值，并关闭活动输出缓冲区
- ob_implicit_flush() - 打开/关闭绝对刷送
- ob_gzhandler() - ob_start 回调函数压缩输出缓冲区
- ob_iconv_handler() - 以输出缓冲处理程序转换字符编码
- mb_output_handler() - 在输出缓冲中转换字符编码的回调函数
- ob_tidyhandler() - ob_start callback function to repair the buffer

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open