2011-04-01 122 views
0

我一直在试图找到启用了output_buffering的主机,并且我的主机atm没有启用它。要抓住他是不可能的......所以......我需要找到一个解决方案或获得一个新的主机。我以为在决定是否有“正确的方式”或output_buffering不需要的方式之前,我可能会问。有没有一种“正确的方法”来避免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坏/不好的做法?

回答

6

输出缓冲是一种解决方法。这可以通过正确构建应用程序流程并注意编码问题和悬空空白来避免。但作为解决这些问题的解决方法,它非常实用。并且可以手动通过将该你的脚本的顶部启用:

<?php 
    ob_start(); 

你的情况,实际问题可能是UTF8 BOM。这是文本文件开始时的一个不可见的标记(比如你的php脚本)。它在<?php之前生活,因此ob_start()不再有帮助。它输出3个字节并阻止标题发送。如果是这种情况,那么ob_start将无济于事。

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

php_value output_buffering On 
+0

我试图通过htaccess的实现,并没有帮助。主机我显然覆盖了.htaccess设置,因为无论我设置404甚至找不到的页面,它都不会从.htaccess中读取。 – Kyle 2011-04-01 23:21:42

+0

@凯尔:使用hexeditor来检查你的脚本。或者使用其他文本编辑器(Notepad ++)保存没有BOM的文件。 – mario 2011-04-01 23:23:42

+0

辉煌。我想我会和一位新主持人一起去,谢谢你提供的信息mario,它确实有帮助。我从来不知道ob_start();这太妙了!谢谢。 – Kyle 2011-04-02 07:11:04

相关问题