有没有“正确的方法”来避免output_buffering?

时间:2011-04-01 23:15:12

标签: php output-buffering

我一直在尝试找到启用了output_buffering的主机,而我的主机atm没有启用它。抓住他是不可能的......所以......我需要找到一个解决方案或者获得一个新主机。在我决定是否有“正确的方法”或者不必使用output_buffering的方式之前,我想我可能会问。

这是我制作的一个脚本,如果没有output_buffering就无法运行:

<?php
session_start();
if (isset($_SESSION['authenticated'])) {
    if (isset($_GET['time']) && isset($_GET['user']) && isset($_GET['pass']) && isset($_GET['ip'])) {
        require("config.php");
        $currentTime = time();
        $time = mysql_real_escape_string($_GET['time']);
        $user = mysql_real_escape_string($_GET['user']);
        $pass = mysql_real_escape_string($_GET['pass']);
        $ip = mysql_real_escape_string($_GET['ip']);
        mysql_query("INSERT INTO `deleted` (timeDeleted, timeLogged, username, password, ip) VALUES('$currentTime','$time','$user','$pass','$ip')") or die(/*mysql_error() . */" Error code: 1");
        mysql_query("DELETE FROM `flagged` WHERE `timeLogged`='$time'") or die(/*mysql_error() . */"Error code: 2");
        mysql_close($con);
        include("flagged.php");
    }
} else {
    header("Location: index.php");
    exit;
}
?>

它失败了,因为include("flagged.php");永远不会被包含在内,或者它可能会被我从未见过它。

所以我的问题是:如果没有output_buffering,我该怎么做? output_buffering是坏/不好的做法?

1 个答案:

答案 0 :(得分:6)

输出缓冲是一种解决方法。可以通过正确构造应用程序流并注意编码问题和悬空空白来避免这种情况。但作为解决此类问题的方法,它非常实用。您可以通过将其置于脚本之上来手动启用它:

<?php
   ob_start();

您的案例中的实际问题可能是UTF8 BOM。这是文本文件开头的一个不可见标记(如php脚本)。它位于<?php之前,因此ob_start()无法帮助。它输出3个字节,防止标头被发送。如果是这种情况,那么ob_start将无济于事。

但输出缓冲通常也可以通过.htaccess启用:

php_value output_buffering On