php 中的 ob_ 函数的目的是什么? (ob_start()、ob_get_contents() 等)

What is the purpose of the ob_ functions in php? (ob_start(), ob_get_contents(), etc.)

我已经阅读了 PHP 文档,但它没有提供任何实际示例。

我正在使用一些开源代码,它包含这个电子邮件功能。我试图理解为什么这些 ob_XXX() 函数在这里以及它们的作用(因为我需要使用 PHPMailer 而不是 mail())。当我在 return 之前打印 return 值时,它总是空的。

// Send using PHP mail() function
ob_start();
mail($to,$subject,$message,$headers);
$tmp = trim(ob_get_contents());
ob_end_clean();
return (strlen($tmp)) ? $tmp : true;

我知道这与输出缓冲有关,虽然我对什么是缓冲有所了解,但我不确定为什么要在这里使用它。谢谢!

如果你在PHP中这样说:

echo 'Hello';

它会导致字符串 Hello 或多或少立即发送到浏览器。这在您直接输出内容的上下文中很好,但有时您想使用该工作流,但捕获输出而不是将其发送到浏览器。因此,您可以这样做:

ob_start();
echo 'Hello';
$tmp = ob_get_contents();
ob_end_clean();

这将导致 无任何内容 被发送到浏览器,但 $tmp 现在将包含 Hello.

这在电子邮件中很有用,因为您可能想要做的是将模板呈现为字符串,然后将其用作电子邮件正文而不是将其发送到浏览器。

使用 PHPMailer,您可以使用该工作流程创建邮件正文,然后将其传递给 PHPMailer:

$mail->Body = $tmp;

您发布的示例有点奇怪,因为 mail() 函数通常不会输出任何内容,因此它不会捕获任何内容。