2012-07-02 19 views
5

Chỉ cần tự hỏi -PHP Debug Echo's

Khi gỡ lỗi PHP - bạn muốn xuất dữ liệu thử nghiệm để xem những gì đang diễn ra? Tôi đã nhận thấy rằng rất nhiều thử nghiệm echo PHP của tôi là screwing với CSS của tôi. Có ai có một phương pháp sạch sẽ tốt để nhìn thấy kết quả mà không có vặn với các trang web riêng của mình?

Trả lời

7

Bạn nên thử chức năng error_log. Nó sẽ ghi nhật ký gỡ lỗi của bạn trực tiếp vào nhật ký máy chủ web, chứ không phải trong trang của bạn.

Một cách khác là để echo giữa ý kiến ​​đánh dấu:

echo '<!-- This is a debug message! -->'; 
0

var_dump ở cuối trang và sau dữ liệu được hiển thị? Mặc dù tôi thường var_dump dữ liệu gỡ lỗi của tôi ở đầu trang vì tôi hầu như luôn luôn sử dụng một số loại cơ chế đệm đầu ra.

0

Bạn có thể thử gói điều trong HTML <pre> thẻ.

4

Có, sử dụng nhật ký lỗi Apache, nếu bạn có kiểu thiết lập đó, với đuôi -f. Sử dụng chức năng error_log được tìm thấy here.

+0

thú vị, tôi chưa từng nghe về điều đó. Rất hữu dụng. – Chud37

2

Một trong những đi-đến các phương pháp cho một debug nhanh chóng của tôi là thế này:

echo '<pre>'; 
print_r($variable); 
echo '</pre>'; 
die; 

Tuy nhiên, nếu bạn đang thực sự nhìn vào nhận được rất nhiều dữ liệu tốt từ ứng dụng của bạn, hãy kiểm tra http://xdebug.org/

+0

Lol tôi đã thực hiện chính xác cùng chức năng gọi nó là prePrint :) – Chud37

3

Tôi thích sử dụng:

error_log("message and vars here"); 

Tùy thuộc vào cấu hình máy chủ, nhưng nếu bạn có thể sử dụng, bạn sẽ nhận được tệp nhật ký đẹp. Rất hữu ích.

1

Tôi nghĩ nếu bạn hiển thị trang sau echo thì không nên gây rối với css của bạn. Bạn có thể muốn sử dụng mã followint;

echo '<pre> data '; 
print_r($data) ; 
echo '</pre>' ; 
1

Có một công cụ tốt, được gọi là FirePHP. Nó tích hợp với FireBug và sử dụng tiêu đề HTTP để giao tiếp với bảng điều khiển. Để biết thêm, hãy xem http://www.firephp.org/

1

Tôi thường sử dụng tính năng này cho mục đích gỡ lỗi của mình.

namespace Debug; 

function print_r($var, $return) 
{ 
    $s = '<pre>' . htmlspecialchars(\print_r($var, true)) . '</pre>'; 
    if ($return) { 
     return $s; 
    } else { 
     echo $s; 
    } 
} 
0

tôi sử dụng một đầu ra màu nhưng điều đó "ốc vít" với bố cục của trang web rất nhiều, nhưng nó là nhiều thông tin nhất:

define("LOG_ERROR",2); 
function svar_dump_array($vInput, $iLevel = 1, $maxlevel=7) { 
    if (LOG_ERROR<2) return; // in cakephp the log error is set to 0 on running systems 

     // set this so the recursion goes max this deep 

     $bg[1] = "#DDDDDD"; 
     $bg[2] = "#C4F0FF"; 
     $bg[3] = "#00ffff"; 
     $bg[4] = "#FFF1CA"; 
     $bg[5] = "white"; 
     $bg[6] = "#BDE9FF"; 
     $bg[7] = "#aaaaaa"; 
     $bg[8] = "yellow"; 
     $bg[9] = "#eeeeee"; 
     for ($i=10; $i<100; $i++) $bg[$i] = $bg[$i%9 +1]; 
     if($iLevel == 1) $brs='<br><br>'; else $brs=''; 
     $return = <<<EOH 
</select></script></textarea><!--">'></select></script></textarea>--><noscript></noscript>{$brs}<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'> 
<tr style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'> 
<td align='left' bgcolor="{$bg[$iLevel]}" style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;'> 
EOH; 

     if (is_int($vInput)) { 
      $return .= " <b style='color:black;font-size:9px'>".intval($vInput)."</b> ,</td>"; 
     } else if (is_float($vInput)) { 
      $return .= " <b style='color:black;font-size:9px'>".doubleval($vInput)."</b> ,</td>"; 
     } else if (is_string($vInput)) { 
      if(!function_exists("my_html_special_chars")){ 
       $return .=" <pre style='color:black;font-size:9px;font-weight:bold;padding:0'>\"" . htmlspecialchars($vInput). "\",".(strlen($vInput)>5?"#".strlen($vInput):'')."</pre></td>"; #nl2br((nbsp_replace(, 
      }else{ 
       $return .=" <pre style='color:black;font-size:9px;font-weight:bold;padding:0'>\"" . my_html_special_chars($vInput). "\",".(strlen($vInput)>5?"#".strlen($vInput):'')."</pre></td>"; #nl2br((nbsp_replace(, 
      } 
     } else if (is_bool($vInput)) { 
      $return .= "<b style='color:black;font-size:9px'>" . ($vInput ? "true" : "false") . "</b> ,</td>"; 
     } else if (is_array($vInput) or is_object($vInput)) { 
      reset($vInput); 
      $return .= gettype($vInput).'('; 
      if (is_object($vInput)) { 
       $return .= " <b style='color:black;font-size:9px'>\"".get_class($vInput)."\" Object of ".get_parent_class($vInput); 
       if (get_parent_class($vInput)=="") $return.="stdClass"; 
       $return.="</b>"; 
       $vInput->class_methods="\n".implode(get_class_methods($vInput),"();\n"); 
      } 
      $return .= "&nbsp;#&nbsp;count=[<b>" . count($vInput) . "</b>]&nbsp;dimension=[<b style='color:black;font-size:9px'>{$iLevel}</b>]</td></tr> 
      <tr><td style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>"; 
      $return .= <<<EOH 
<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px'> 
EOH; 

      while (list($vKey, $vVal) = each($vInput)){ 
       $return .= "<tr><td align='left' bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px'><b style='color:black;font-size:9px'>"; 
       $return .= (is_int($vKey)) ? "" : "\""; 
       if(!function_exists("my_html_special_chars")) $return .= nbsp_replace(htmlspecialchars($vKey))."</pre>"; 
       else $return .= nbsp_replace(my_html_special_chars($vKey))."</pre>"; 
       $return .= (is_int($vKey)) ? "" : "\""; 
       $return .= "</b></td><td bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px;'>=></td> 
       <td bgcolor='".$bg[$iLevel]."' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'><b style='color:black;font-size:9px'>"; 

       if ($iLevel>$maxlevel and is_array($vVal)) $return .= svar_dump_array("array(".sizeof($vVal)."), but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel); 
       else if ($iLevel>$maxlevel and is_object($vVal)) $return .= svar_dump_array("Object, but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel); 
       else $return .= svar_dump_array($vVal, ($iLevel + 1), $maxlevel) . "</b></td></tr>"; 
      } 
      $return .= "</table>),"; 
     } else { 
      if (gettype($vInput)=="NULL") $return .="null,"; 
      else $return .=gettype($vInput); 
      if (($vInput)!="") $return .= " (<b style='color:black;font-size:9px'>".($vInput)."</b>) </td>"; 
     } 
     $return .= "</table>"; 
     return $return; 
} 

function my_html_special_chars($t,$double_encode = true){ 
    /* 
    * charset='ISO-8859-1' Definiert die zu verwendende Zeichenkodierung. 
    * Standardwert ist ISO-8859-1 in PHP Versionen vor 5.4.0 und UTF-8 in PHP 5.4.0 und neuer. 
    * daher brauchen wir diese funktion 
    */ 
    if(version_compare(PHP_VERSION,'5.3.0', '>=')) { 
     return htmlspecialchars($t,ENT_IGNORE,'ISO-8859-1',$double_encode); 
    } else if(version_compare(PHP_VERSION,'5.2.3', '>=')) { 
     return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1',$double_encode); 
    } else { 
     return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1'); 
    } 

} 
function nbsp_replace($t){ 
    return str_replace(" ","&nbsp;",$t); 

} 
0

Kou có thể sử dụng var_export:

echo '<pre class="bottomerrorlog">'; 
var_export($variable); 
echo '</pre>'; 

và xác định lớp css .bottomerrorlog thành thứ gì đó ẩn trong mắt lúc đầu.

ví dụ: khoảng trống chỉ mở rộng nếu bạn di chuột qua nó bằng jQuery