2011-05-19 70 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文件。

快乐狩猎!