2010-07-03 48 views
1

我有一個PHP腳本導致無限重定向循環,我不知道如何檢測它。有什麼辦法可以檢測到這個?我可以添加任何命令到我的.htaccess寫入重定向到日誌?在apache中跟蹤無限循環重定向

在此先感謝,

+0

應該已經有一個日誌,這就是所謂的錯誤日誌。它通常會告訴你哪個文件導致了循環以及在什麼時間。 – animuson 2010-07-03 04:30:14

+0

你可以用你的htaccess更新你的問題嗎? – Prix 2010-07-03 04:30:19

+0

@animuson:如果重定向是由腳本引起的,那麼在錯誤日誌中沒有任何內容(我認爲也不會有htaccess重定向)。這是有道理的 - 錯誤在客戶端引發,服務器不知道它。 – Tgr 2012-03-13 11:13:14

回答

1

調試在PHP中簡單的方法其實是一個繁瑣的工作。你需要的是你應該在每行之後提供一些「echo」語句(輸出一個虛擬文本),然後在「出口」命令語句中提供。

然後,重定向循環將不起作用,因爲「退出」使程序計數器停止,並且您現在可以依次調試出錯的位置。

至於「.htaccess」命令,你不需要任何這樣的事情。請在您的根文件夾中檢查「error.log」文件,該文件託管了您網站的index.php文件。如果您在某些文本編輯器(如寫字板)中打開此文件,您將看到所有錯誤列表以及日期&時間。

EDIT(其中一個實例提供): -
假設你有一個頁面類似如下: -

<?php 
session_start(); 
include_once("includes/header.php"); 

$var1 = 'blah blah'; 
// some code 

$var2 = 'some more blah blah'; 
// some code again 

// may be some more code 

include_once("includes/footer.php"); 
?> 

現在,更改代碼以這種方式進行調試: -

<?php 
session_start(); 
echo 'test 1'; 
exit; 

// other code of yours comes after this line 
?> 

如果有效,請再次更改爲: -

<?php 
session_start(); 
include_once("includes/header.php"); 
echo 'test 2'; 
exit; 

// other code of yours comes after this line 
?> 

現在,如果它的工作,這意味着你在「header.php」文件沒有問題,否則你在包含文件&有一些問題,你將需要開始以相同的方式在「header.php」文件。

希望它有幫助。

header ("Location: foo.php"); 

//header ("Location: foo.php"); 
echo "redirecting to foo.php on line ## of bar.php"; 
exit; 

+0

好,其實我有數以百計的PHP腳本的;真誠的,我不能使用這種技術每個腳本... :(我readed一些有關在Apache的重寫引擎重定向日誌,但我不知道如何使用它... – FidoBoy 2010-07-03 09:34:59

+0

但我認爲這是手頭最好的解決方案,如果你想了解腳本中存在的問題。 – 2010-07-03 16:08:49

0

變化情況(最有可能的富=酒吧,但你可以包含多個頁面的循環......)

0

我目前正在掙扎着無限重定向。由於應用程序和事後編程週期的複雜性,並非所有的重定向都是正確的。

如果你在開始時設置了會話(比如說autloader文件),你不能簡單地檢查會話是否自行循環。

我的建議是,你寫變量重定向到外部文件(即使用file_put_contents或fwrite),以便即使瀏覽器檢測到一些誤解,也可以跟蹤執行。即使在屏幕上看不到任何回顯,寫入外部文件也會給您提供一個遵循執行的機會。

無限重定向通常來自不必要的複雜而形成的項目結構編寫代碼和誤解。

祝你好運!