2011-05-19 51 views
3

我不知道我的PHP發生了什麼。我使用了一堆我自己開發的類和一個半MVC框架(作爲一個實驗)。所以PHP文件包含很多類文件。PHP錯誤行數完全關閉

我的錯誤消息的PHP行號完全關閉,因此無用,使我無法調試。例如,現在我收到一條錯誤消息:

`Parse error: syntax error, unexpected ')' in /view.php on line 209 

唯一的問題是:有沒有「)」近209線更糟糕的是在任何地方,如果我把die()上線200左右,它仍然給我一個錯誤消息,現在推到210行。很顯然,代碼行正在考慮,但由於某種原因,它不會死。

另一件事是,它包括一個header.php文件在這行之前。頭文件基本上只輸出一些HTML,並在其他頁面上正常工作。然而在這個頁面上,它甚至沒有輸出標題;它只是一個空白頁面和錯誤信息。

有什麼我可以做,使用更可靠的調試?如果我可以有一個準確的行號,我肯定會很容易地找到這個bug。

編輯:我發現了錯誤。這個問題的關鍵不是解決意外的')'錯誤。重點是:爲什麼行號不準確?實際的錯誤消息是218行,而不是209或210.

+0

該視圖與某些數據表單或什麼有關? – 2011-05-19 05:24:26

+0

使用像eclipse這樣的編輯器。如果它發生,它會向你顯示語法錯誤。 – Gaurav 2011-05-19 05:24:41

+0

好的,但爲什麼行號首先不準確? – andrewtweber 2011-05-19 05:25:29

回答

3

這是您的行結尾。打開一個程序,您可以在其中更改行結束符並將其更改爲服務器的行結束符,並且行號將是正確的。我不知道Windows,但在Mac上,您可以使用TextWrangler(或BBEdit)和使用gedit在Linux上更改行尾。

0

嘗試添加一個簡單的堆棧跟蹤記錄功能。

使用它:

<?php 
require_once("Log.class.php"); 
$myLog = new Log(); 

$log->write("Tag here", "Details here"); 
?> 

Log.class.php:

<?php 

    $debugFolder = "/"; 

    class ExpectedParamaterUndefinedException extends Exception {} 

    class Log { 

     private $logs = array();  

     function __contruct(){  
     } 

     function write($type, $message){ 

      $trace=debug_backtrace(); 
      $caller=array_shift($trace); 
      $fileParts = explode("/", $caller['file']); 
      $filePieces = explode(".", $fileParts[count($fileParts) -1]); 
      $this->logs[ $filePieces [count($filePieces) - 2] ] .= " [ ".date(DATE_RFC822)." ] [ $type ] [Line : ".$caller['line']."] ::: $message \n "; 
     } 

     function __destruct(){ 
      foreach($this->logs as $caller => $log){ 
       $fp=fopen($debugFolder . "debug/" . $caller.".log", "a"); 
        fwrite($fp, $log); 
      fclose($fp); 
      } 
     } 
    } 
?> 

你將最終爲每個登錄類.log文件。

快樂狩獵!