2010-05-18 35 views
0
header('Location: ' . $url); 

我檢查了,沒有以前的輸出:以前沒有輸出,但頭重定向不在PHP工作

ob_start(); 

... 
var_dump(ob_get_contents()); 
ob_flush(); 
header('Location: ' . $url); 

輸出:

string '' (length=0) 

那麼爲什麼用重定向失敗?

儘管我在error_log中看到很多警告和通知,但只要它不向瀏覽器輸出任何內容,就不會影響header(),對不對?

UPDATE

一些日誌(不應雖然有關):

[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP Deprecated: Function eregi() is deprecated in D:\\Works\\general 
[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://localhost/cookie_usage.php 
[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP 1. {main}() D:\\Works\\login.php:0, referer: http://localhost/cookie_usage.php 
[Wed May 19 00:26:10 2010] [error] [client 127.0.0.1] PHP 2. tep_redirect() D:\\Works\\login.php:33, referer: http://localhost/cookie_usage.php 
+2

取決於,也許你可以顯示警告? – 2010-05-18 16:03:49

+0

$ url爲空。註釋必須至少包含15個字符。 – 2010-05-18 16:07:08

+1

你確定$ url不是空的嗎? – webbiedave 2010-05-18 16:08:33

回答

3

使用ob_flush()發送到輸出緩衝器。 (打印OB中的內容) 這被認爲是輸出。 您可能想要使用ob_clean()

在頭('location ...')調用後使用 exit()或die()也是很好的做法。

另請注意,文件末尾的空格將執行此操作。

對於在PHP文件的末尾我從來沒有使用的大部分?>了,只要把它開

?>是可選的反正。

+1

他只在這裏使用ob來測試輸出。 – webbiedave 2010-05-18 16:08:05

+0

我沒有意識到,但它是解決問題的方法;使用ob來捕獲輸出和ob_clean()並且重定向應該工作,否則可能在<?php標籤之外有空格 – DBruns 2010-05-18 16:14:07

+0

我也在'header'之前嘗試過'ob_clean()',而不是working.And url是有效的。 – user198729 2010-05-18 16:23:01

-3

不會影響header()只要 ,因爲它不會輸出任何內容到 瀏覽器,對不對?

錯。

+0

爲什麼?PHP手冊沒有提到它。 – user198729 2010-05-18 16:20:27

+0

因爲你必須閱讀錯誤信息,而不是坐下來猜測整天!如果是標題的問題,應該有錯誤消息。要成爲卡比安,什麼是錯的。玩輸出緩衝只是錯誤的方式。 – 2010-05-18 16:27:49

+0

我沒有猜測,我經常檢查錯誤日誌,但這次真的沒有幫助! – user198729 2010-05-18 16:33:37

0

我在幾天前面臨類似的問題。在頭文件函數之前調用的php包含文件的末尾有額外的空白空間。我刪除了這個空白區,它爲我開始工作。