2010-08-09 169 views
0

因此,當我部署了一些我認爲已經測試過的代碼時,我感到非常吃驚。看起來我的測試機器和我的服務器之間肯定有一些區別。具有標題重定向的完全相同的代碼在我的測試機器上完美工作,並且完全不在服務器上。服務器上的重定向根本沒有發生,結果留下空白頁面。PHP標題(「位置:...」)在一臺計算機上運行,​​而不是在另一臺計算機上運行

頭文件在腳本中間的某處被調用 - 但是沒有輸出。它不會輸出任何東西,直到腳本的最後。在一切運行之後很久。它緩衝一切。

服務器和測試機器都運行相同的PhP版本,相同的Apache版本。配置文件中是否有一些可以讓頭部發生一個而不是另一個發生的東西?有沒有其他事情會導致它失敗?

編輯:

下面是設置標題行:

public function setRedirect($url) { 
    header('Location: '.$url); 
} 

而這裏的調用代碼:

$url = new URL('index'); 
$this->layout->setRedirect($url->toString()); 

URL::toString()總是產生一個完全合格的域名,在這種情況下:http://domain/index.php?action=index

我檢查了Php和Apache錯誤日誌。納達。

+1

您是否重定向到絕對(完全限定)的URL? – 2010-08-09 16:01:29

+1

只是爲了完整:您可以包含具有「header()」調用的行嗎? – Tomalak 2010-08-09 16:02:18

+0

@Peter Bailey @Tomalak完成(是)並完成。查看修改。 – 2010-08-09 16:18:37

回答

3

在調用header之前可能有一些空格或其他形式的輸出。

只有當您設置了ini設置output-buffering(或者如果您明確開始輸出緩衝,但在這種情況下,重定向應該在兩臺計算機上都能正常工作),這才起作用。

您可以打開錯誤報告來確認這一點。

+0

如果是這種情況,爲什麼它可以在測試機器上運行,而不是在服務器上運行?輸出和腳本是相同的。另外,錯誤報告什麼也沒有顯示 – 2010-08-09 16:19:24

+0

@Daniel因爲服務器可能會打開輸出緩衝並關閉測試機。 – Artefacto 2010-08-09 16:20:50

+0

太棒了!對不起,我第一次誤解了你的答案,現在我明白了。事實上,測試服務器的output_buffering處於打開狀態,並且服務器關閉了它。讓我們看看這是否修復它... – 2010-08-09 16:29:05

0

使用Fiddler或其他客戶端工具來檢查您的標題。確定Location:標題實際上正在發送。另外,一些瀏覽器按照需要發送標題的順序挑剔。

0

我認爲您的服務器會在您的頁面中放置一些腳本來跟蹤訪問者併爲您提供流量統計信息或類似用途。理想情況下,你應該得到一個錯誤,但可能是你的服務器有錯誤報告禁用,這給你一個空白頁面。

我建議你運行一個帶有語法錯誤的腳本,並檢查你的服務器是否禁用了錯誤報告。

0

我認爲最有可能的解釋是,一個錯誤導致腳本退出您的服務器,並關閉顯示錯誤(因此,空白屏幕)。我會建議在你的服務器上檢查Apache的錯誤,看看PHP是否在裏面放了些東西。

否則,您可以使用LiveHTTPHeaders(用於Firefox)等瀏覽器擴展來查看位置標頭是否正在發送,或嘗試調試腳本以查看它是否甚至達到該標頭調用。

相關問題