2011-02-17 65 views
1

我有一個很奇怪的問題,我似乎無法追查。任何關於調試的幫助將是大大讚賞!調試幫助 - PHP包括導致頁面刷新

讓我來描述這個使用場景。

情景1(不正確

  1. PHP召喚出一個CAS服務器(使用curl_exec),並獲取用戶信息回
  2. PHP檢查數據庫,以保證用戶從返回CAS存在並失敗(這是正確的,我正在測試一個不存在的用戶),並將錯誤消息設置爲「未找到用戶」(這是正確的錯誤消息)
  3. PHP inc ludes的top.php文件
  4. 頁面隨機刷新或重定向到自己,並啓動過程...這是我無法弄清楚。
  5. PHP召喚出到CAS服務器(使用curl_exec),並且由於CAS票已經被用來接收到錯誤,創下了一個新的錯誤消息「CAS駁回您的憑據」(這是不正確的)
  6. PHP包括top.php文件和刷新/重定向第二次
  7. PHP打印出「CAS駁回您的憑據」(這是不正確的)

方案2(半正確

  1. PHP召喚出一個CAS服務器(使用curl_exec),並獲取用戶信息回
  2. PHP檢查數據庫,以保證用戶從CAS返回存在並且失敗(再次,這是正確的,我仍在測試不存在的用戶)並將錯誤消息設置爲「用戶未找到」(這是正確的錯誤消息)
  3. 我跳過top.php因爲它被註釋掉了,打印出來「用戶未找到」(這是正確的錯誤消息)

調試

所以,我已經檢查,反覆檢查和三重檢查了top.php不使用includerequireredirect(我們寫的一個函數打印一個<meta>重定向標記,然後調用exit;),或者其他實際刷新頁面的東西。

事實上,我已經輸入了一條die語句,該語句打印出錯誤消息。在top.php的一行上,它可以正確打印。當我將該語句向下移動一行時(HTML </div>標籤下),它刷新頁面並打印不正確的錯誤消息。甚至沒有任何關於PHP標籤的地方。

據我所知,這意味着這個問題實際上不是在top.php文件,因爲打印出</div>不應導致頁面刷新/重定向。

關於如何從這裏進行調試的任何想法都將非常有幫助。清除緩存/緩存?如何更好地跟蹤PHP正在做什麼?

注意:沒有輸出PHP錯誤。

更新:耶,我找到了罪魁禍首!我只是複製/粘貼login.php中的代碼,而不是調用include 'top.php';,它提出了同樣的問題。於是,我開始刪除線,直到我發現造成問題的原因之一:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

所以,切換問題完全因爲我沒有太多擺在首位的一個問題:有人可以解釋爲什麼這會導致頁面刷新,爲什麼它只是有時(即它不會不斷刷新頁面)?

+0

你可以發佈你的PHP文件嗎? – Mauro 2011-02-17 22:58:30

+0

您實際上看到瀏覽器正在加載新頁面嗎?你在Apache的訪問日誌中看到新的第二個請求嗎? – 2011-02-17 22:58:59

回答

1

如果你有firefox自己抓住livehttpheaders的副本。打開它並瀏覽場景1.通過http請求和響應頭來跟蹤發生了什麼。它應該爲您提供更多關於瀏覽器和服務器之間發生的事情的信息。