2010-08-07 41 views
3

我有一個HTML表單張貼到下面的index.php:

<?php require_once("/home/full/path/to/included/file.php"); ?> 

而在file.php,我試圖訪問$ _ POST:

ob_start(); 
session_start(); 
var_dump($_POST); 
$contents = ob_get_contents(); 
ob_end_clean(); 
echo $contents; 

不過的var_dump($ _ POST)回報一個空陣列。

將ob函數移到index.php中沒有任何效果。如果我將var_dump($ _ POST)放在 ob_start()之前,或者如果我完全刪除輸出緩衝區,問題就會消失,但我需要輸出緩衝。所以爲了尋找這個問題,我嘗試將表單數據發佈到test.php:

ob_start(); 
$session_start; 
var_dump($_POST); 
$contents = ob_get_contents(); 
ob_end_clean(); 
echo $contents; 

它顯示了一切正常。所以我的file.php的問題似乎是它包含在內,並使用輸出緩衝。你看到我的設置有問題嗎?爲什麼不能通過包含的輸出緩衝腳本來訪問$ _POST?你看到一種方法來解決這個問題,或者一個替代方案?謝謝。

編輯: 另一個可能的因素: 我的HTML表單標籤是這樣的:

<form action="/" method="POST"> 

我使用mod_rewrite來重定向到的index.php。我嘗試動作=「/ index.php」,沒有任何變化,所以它應該沒有關係。

+2

你不「包括:」它使用HTTP URL而不是文件系統路徑?路徑似乎是正確的,但它是最有可能的原因 – 2010-08-07 07:03:27

+0

我使用文件系統路徑包含它,因爲它在文檔根目錄之外(它有敏感數據,我不希望它可公開訪問,無論是否受.htaccess保護) )。 – 2010-08-07 07:08:51

回答

2

我意識到我的問題的原因。刪除了輸出緩衝後,我仔細查看了錯誤消息,並意識到我的file.php中有一個標題(「Location:...」)。我正在重定向到另一個腳本,我試圖調用$ _POST信息。但$ _POST信息顯然不會與header()重定向一起傳輸。

有趣的是,我在header()調用之前有一個var_dump($ _ POST)。我猜輸出緩衝導致header()調用被首先發送,因此在緩衝區之後沒有輸出,因爲頭部(「位置」)重定向而不顯示任何腳本輸出。這聽起來是對的嗎?

(回答我的問題一拉https://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions

+2

有道理。這就是爲什麼我總是在var_dump之後放置一個die()以確保能看到我想要看到的輸出:) – 2010-08-07 08:19:23

+1

這是個好主意。我會記住這一點。 – 2010-08-07 08:24:31