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()
函数通常不会输出任何内容,因此它不会捕获任何内容。
我已经阅读了 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()
函数通常不会输出任何内容,因此它不会捕获任何内容。