[英]PHP redirect without header() or meta
我正在嘗試設計一個執行某些數據庫操作的頁面,然后將用戶重定向回到他們來自的頁面。 問題是我使用require()
函數來獲取與數據庫的連接,因此已經發送了標頭。 元標記是不可能的,因為我希望它看起來像所有進程都是從它們來自的頁面完成的。 有小費嗎? 有沒有辦法可以使用require()
和header()
或者我必須刪除一個? 是否有header()
的替代方案?
如果在發送某些內容之前無法發送header()
,請通過放置ob_start();
使用輸出緩沖 ob_start();
在發送任何內容之前,在腳本的開頭。 這樣,任何內容都將存儲在緩沖區中,直到腳本結束或手動發送緩沖區內容時才會發送。
另一方面,除非包含的腳本發送它們,否則只require
另一個文件就不會生成任何標題/內容。 最常見的“隱藏”原因是在<?php ?>
標簽之前或之后沒有注意到空白。
正如Artefacto所指出的,連接到數據庫不應該要求任何輸出。 修復你要包含的內容(例如database_connect.php)而不是輸出。 在“已發送標頭”問題上查看此搜索 ,這可能有助於您找到“隱藏”輸出。
ob_start(); // start output buffering
echo "<html......"; // You can even output some content, it will still work.
.
.
.
.
.
header("Location: mypage.php");
ob_flush(); //flush the buffer
在這種情況下,所有輸出都被緩沖。 這意味着首先處理標題,然后輸出結果......
在已經發送了一些內容后,您無法發送任何標題。 將header()
調用移到require()
調用之前。
在將任何數據發送到客戶端后,您無法發送標頭。
但是,使用require
並不表示輸出內容。 如果我理解您的權利,您可以包含數據庫文件,運行查詢,然后重定向用戶。 這完全有效。
如果你需要發送一些輸出(為什么你需要進行重定向?)另一種選擇是使用輸出緩沖。 通過使用輸出緩沖,當您回顯它時,您不會將數據發送到瀏覽器,而是將其存儲在緩沖區中。 當您調用ob_end_flush或到達腳本末尾時,將發送數據。 在ob_end_flush之后,您將無法發送任何新標頭。 使用ob_start啟動輸出緩沖。
當我使用輸出緩沖時,可以使用帶有require()
header()
。 這意味着整個腳本被緩沖並在腳本結束時首先發送。
我這樣做了
ob_start("ob_gzhandler"); //begin buffering the output
require_once('/classes/mysql.php');
// Some code where I access the database.
header('/somepage.php');
exit;
ob_flush(); //output the data in the buffer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.