2010-05-28 59 views
-1

我有這段PHP代碼獲取$ _GET ['id'](一個數字),並做了一些與此。 當它完成後,我需要增加這個數字($ _GET ['id'])並重定向到同一頁面,但使用新數字(也使用$ _GET ['id'])。

我做這樣的事情:

$ID = $_GET['id']; 

// Some stuff here 

// and then: 

$newID = $ID++; 

header('Location: http://localhost/something/something.php?id='.$newID); 
exit; 

的這裏的問題是,瀏覽器做它阻止我,我從瀏覽器(Firefox)得到這個錯誤:「該頁沒有正確重定向Firefox已經檢測到服務器正在以一種永遠不會完成的方式重定向這個地址的請求。「

請一定幫忙!

注:有人建議做一個內部循環,我的意思是一個簡單的'for'循環,但是當我這樣做時,我得到一個時間限制錯誤(60秒),因爲循環需要更多時間才能完成。

+0

你能告訴我們實際的代碼嗎?您的示例代碼不檢查條件以停止發送重定向,如果ID符合條件,所以它是一個無限循環.. – Matt 2010-05-28 23:36:39

+3

'$ newID = $ ID ++;'應該是'$ newID = ++ $ ID;' – 2010-05-29 02:16:24

+2

在閱讀你對其他答案的評論後,我確信:你正在使用錯誤的工具來完成這項工作。 – BalusC 2010-05-29 21:26:29

回答

0

那麼答案就是在我的本地主機上使用'for'循環和set_time_limit(0)來將PHP的deafult 60秒限制設置爲0(無限),而不是一次又一次重定向到同一頁面。

1

我認爲是因爲瀏覽器處於無限循環。

如果您發佈的代碼也在something.php那麼它將始終增加數字。

此外,沒有理由做$newID = $ID++,因爲++運算符會自動增加該操作數($ID)。

你想要什麼是某種形式的邏輯來停止循環。也許......

if ($ID > 3) { 
    // don't redirect 
} 

不過,我實在看不出如何重定向一個循環是永遠的好主意,除非你正在嘗試做一些事情,可以通過後臺進程或cron作業可以更好地實現。

+0

well ID指向我需要從網站獲取的文章ID,我想獲取所有文章,所以我想讓這個循環..例如從1到9999,以獲取所有文章。但我認爲瀏覽器會自動停止循環,即使有另一個 如果($ ID> 3){ // //不會重定向 } 像你說的那樣。 – Jonathan 2010-05-29 16:11:54

+0

@Jonathan你的意思是通過下載到你的服務器?只要做一個循環,或使用Cron ...這絕對是*不*你應該怎麼做。 – alex 2010-05-29 16:23:12

+0

當我使用一個簡單的循環例如的問題是,我得到一個時間限制錯誤(60秒)..和它的一個循環,我認爲將需要一個小時或兩個.. – Jonathan 2010-05-29 21:09:52

4

這是一個無限循環,每次頁面加載時,它都會更改$_GET['id']並重新定向到自己。您需要一種方法來檢測該值是如何得到它(最終)並跳過重定向。

我建議你增加id後添加第二個參數,如final這樣,當頁面加載第二次,它跳過了重定向,因爲final設置。

即:

if ($_GET['final'] != 1) 
{ 
    header('Location: http://localhost/something/something.php?id=' . $newID . '&final=1'); 
} 
+0

它不幫我,我需要重定向頁面很多次... – Jonathan 2010-05-29 21:10:45

+1

你必須在某個時候停止它,否則瀏覽器會抱怨無限循環。 – JYelton 2010-05-30 05:12:33

1

我建議你重新設計你在做什麼。重定向回自己不應該發生一次以上,而不需要用戶輸入來繼續循環。

只要瀏覽器看到即使是最微小的可能性和無限循環,它也會崩潰。即使你的if($ ID == 100){..STOP ..}達到100的時候,瀏覽器已經破壞了你的循環,只是因爲按照行業標準,這立刻被認爲是不好的設計,這就是爲什麼你的瀏覽器已經被編程爲阻止這樣的事情開始。

你能分享一下你實際上試圖用這個循環做什麼。我相信有人有辦法實現你想要的,而不是這樣做。

UPDATE發表評論

那麼你可能想看看AJAX或PHP API。我明白你的意思,並希望這樣做,這需要在一個受控的環境中完成,而不是循環。瀏覽器永遠不會允許這種循環。所以,有幾種方法可以做到這一點。你可以用一個客戶端方法來實現,在這個方法中,php爲你提供了一個頁面來將內容從一個源代碼跳轉到另一個源代碼。或嚴格使用PHP API方法來獲取內容並直接將其帶回服務器。然而,這兩種情況都不是初學者的概念。 :) 如果你明白我的意思。

+0

well ID指向我需要從網站獲取的文章ID,我想獲取所有文章,所以我想讓這個循環..例如從1到9999,以獲取所有文章。 – Jonathan 2010-05-29 16:09:46

0

ob_start(); session_start(); ?

if ( $_SESSION["id_old"] == $_GET['id']){ return false;} 

$ID = $_GET['id']; 
$newID = ++$ID; 

$_SESSION["id_old"]= $newID; 


header('Location: http://localhost/something/something.php?id='.$newID); 

exit; 

測試本地主機/東西/ something.php ID = 22 - >本地主機/東西/ something.php ID = 23返回假;

0

它看起來像你試圖從外部來源刮大量的數據。你爲什麼不在自己的計算機上而不是通過瀏覽器將它作爲本地腳本運行?然後,您不必擔心腳本超時或瀏覽器檢測到無限重定向。

+0

聽起來不錯,我在本地使用WAMP服務器localhost,但我怎樣才能做到這一點,而無需使用瀏覽器或PHP的時間限制? – Jonathan 2010-05-29 23:16:54