我有一個很大的PHP應用程序。在我改變了一些設置之後,我得到了一個重定向循環(即,瀏覽器一遍又一遍地重定向到同一頁面)。跟蹤重定向循環
問題是我不知道在這個應用程序中哪個命令(哪個行在哪個PHP文件中)導致重定向。有沒有辦法跟蹤調用header()
函數?或者 - 更好 - 是否有一種方法可以跟蹤PHP中的重定向?
由於提前,
米歇爾
我有一個很大的PHP應用程序。在我改變了一些設置之後,我得到了一個重定向循環(即,瀏覽器一遍又一遍地重定向到同一頁面)。跟蹤重定向循環
問題是我不知道在這個應用程序中哪個命令(哪個行在哪個PHP文件中)導致重定向。有沒有辦法跟蹤調用header()
函數?或者 - 更好 - 是否有一種方法可以跟蹤PHP中的重定向?
由於提前,
米歇爾
您可以使用XDebug和它的功能,跟蹤功能爲。 http://xdebug.org/docs/execution_trace說:
Xdebug允許你記錄所有的函數調用,包括參數和返回值到不同格式的文件。
一旦你找到了呼叫,你可以進入代碼並逐步執行它。然後你需要一個XDebug的前端,例如netbeans。
如果您的應用程序被重定向到相同的URL,你應該檢查重定向之前,例如:
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($targetHost !== $_SERVER['HTTP_HOST'] &&
$targetPath !== $_SERVER['REQUEST_URI_PATH'] &&
$targetQuery !== $_SERVER['QUERY_STRING']) {
// redirect
}
謝謝。這就是我想要做的,但我不知道該把代碼放在哪裏,因爲我不知道哪個指令會導致重定向。這是我的原始問題。 – 2010-04-11 16:14:07
不是在PHP但在HTTP。當然是。帶上自己的任何HTTP嗅探器,如LiveHTTPHEaders firefox插件,並實時觀看所有重定向:)
您需要做的是覆蓋您感興趣的功能,然後執行回溯以查找文件和行號。
用於覆蓋內置功能:http://php.net/manual/en/function.override-function.php
爲了產生回溯:http://php.net/manual/en/function.debug-backtrace.php
也許XDebug或任何日誌記錄機制可能會有所幫助。 – Hanseh 2010-04-11 18:59:17