2012-07-02 5 views
5

Solo pregunto -PHP Debug Echo's

Al depurar PHP - ¿Cómo te gustaría dar salida a los datos de prueba para ver qué está pasando? Me he dado cuenta de que muchas de mis pruebas de eco PHP están jodiendo con mi CSS. ¿Alguien tiene un buen método de limpieza para ver los resultados sin atornillar con el sitio en sí?

Respuesta

7

Debería probar la función error_log. Registrará su salida de depuración directamente en los registros del servidor web, y no en su página.

Otra forma es hacer eco entre las marcas de comentarios:

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

var_dump al final de la página y después de los datos representados? Aunque generalmente var_dump mis datos de depuración en la parte superior de la página porque casi siempre uso algún tipo de mecanismo de almacenamiento en búfer de salida.

0

usted podría tratar de envolver las cosas en HTML <pre> etiquetas.

4

Sí, utilice el registro de errores de Apache, si tiene ese tipo de configuración, con tail -f. Utilice la función error_log que se encuentra here.

+0

interesante, yo no había oído hablar de eso. Muy útil. – Chud37

2

Uno de mi ir a métodos para una depuración rápida es la siguiente:

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

Sin embargo, si usted realmente está buscando en conseguir un montón de buenos datos desde la aplicación, echa un vistazo a http://xdebug.org/

+0

Lol hice exactamente la misma función llamándolo prePrint :) – Chud37

3

me gusta usar:

error_log("message and vars here"); 

depende de la configuración del servidor, pero si se puede usar, se obtiene un buen archivo de registro. Muy útil.

1

Creo que si renderiza la página después de echo ing, no debería estropear su CSS. Es posible que desee utilizar el código followint;

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

Hay una buena herramienta, llamada FirePHP. Se integra con FireBug y usa encabezados HTTP para comunicarse con la consola. Para obtener más información, consulte http://www.firephp.org/

1

Normalmente uso esto para mis propósitos de depuración.

namespace Debug; 

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

que utilizar una salida de color, sino que los "tornillos" con el diseño del sitio mucho, pero es más informativo:

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 puede utilizar var_export:

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

y define la clase css .bottomerrorlog a algo oculto al ojo al principio.

por ejemplo un espacio vacío que sólo se expande si se pasa sobre ella con el ratón por jQuery