2011-04-01 119 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

相關問題