<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coders.me &#187; Errores de Programación</title>
	<atom:link href="http://www.coders.me/lang/en/category/errores-de-programacion/feed" rel="self" type="application/rss+xml" />
	<link>http://www.coders.me/</link>
	<description>Blog de Informática y Programación</description>
	<lastBuildDate>Mon, 07 Dec 2009 18:48:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Errores: ¿Dónde? ¿Cúando? y ¿Porqué?</title>
		<link>http://www.coders.me//lang/en/php/errores-donde-cuando-y-porque</link>
		<comments>http://www.coders.me//lang/en/php/errores-donde-cuando-y-porque#comments</comments>
		<pubDate>Thu, 21 Aug 2008 03:00:18 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Errores de Programación]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.coders.me/?p=264</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/errores-48x48.jpg" width="48" height="48" alt="" title="Errores de Programación" /><br/><p>La programación es 50% <strong>construir</strong> &#8211; 50% <strong>arreglar</strong>. El arte de construir es algo maravilloso y lo que nos produce mayor satisfacción&#8230; Por el contrario, arreglar los errores (que nosotros mismos construimos) puede tornarse un trabajo más difícil que programar, puede…</p>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/errores-48x48.jpg" width="48" height="48" alt="" title="Errores de Programación" /><br/><p>La programación es 50% <strong>construir</strong> &#8211; 50% <strong>arreglar</strong>. El arte de construir es algo maravilloso y lo que nos produce mayor satisfacción&#8230; Por el contrario, arreglar los errores (que nosotros mismos construimos) puede tornarse un trabajo más difícil que programar, puede hacer de tu vida un infierno, hasta el punto en que te haría dudar sobre si elegiste bien tu profesión o debiste ser veterinario (si lo sé, exagero <img src='http://www.coders.me/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' />  ).</p>
<p>Arreglar errores es todo un tema aparte, pero&#8230; ¿Cómo poder arreglar algo que no sabemos <strong>por qué</strong> se produce, <strong>cuando</strong> se produce y <strong>dónde</strong> se produce?</p>
<p>Para eso se inventaron las <strong>descripciones de errores</strong> (junto con un número de identificación). Aunque algunas veces esas descripciones son <em>tan útiles como un destornillador para zurdos</em>. Es algo que yo llamo &#8220;errores ciegos&#8221;, errores que no dicen nada, errores que no aportan nada a la resolución y estorban o confunden. </p>
<p>Por ejemplo, errores como los que el WordPress da:<br />
<img src="http://www.coders.me/wp-content/uploads/2008/08/identifica_el_puto_error.jpg" alt="" title="Identifica el maldito error!" width="600" height="272" class="alignnone size-full wp-image-265" /></p>
<p>&#8220;Ha ocurrido un error sin identificar.&#8221; ¿que rayos ha pasado? Algunos podrían decir que &#8220;por lo menos me lo ha dicho en mi idioma&#8221;. Pero esta descripción de &#8220;sin identificar&#8221; no ayuda en nada, y simplemente deja una única opción al usuario: <strong>resignarse</strong>, <del datetime="2008-08-20T21:44:58+00:00">y empezar a rezar para que no ocurra de nuevo.</del></p>
<h2>Errores en PHP</h2>
<p>Gracias a una función encontrada en los <a rel="nofollow" href="http://ar2.php.net/manual/es/function.set-error-handler.php#74881">comentarios</a> de la documentación de PHP, podemos conseguir que los errores mostrados digan algo más que un simple &#8220;ha ocurrido un error, jodete!&#8221; y así poder cercarlo y solucionarlo <img src='http://www.coders.me/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>La función en cuestión es la siguiente:</p>
<pre class="brush: php;">function my_error_handler($errno, $errstr, $errfile, $errline){
  $errno = $errno &amp; error_reporting();
  if($errno == 0) return;
  if(!defined('E_STRICT'))            define('E_STRICT', 2048);
  if(!defined('E_RECOVERABLE_ERROR')) define('E_RECOVERABLE_ERROR', 4096);
  print &quot;&lt;pre&gt;\n&lt;b&gt;&quot;;
  switch($errno){
    case E_ERROR:               print &quot;Error&quot;;                  break;
    case E_WARNING:             print &quot;Warning&quot;;                break;
    case E_PARSE:               print &quot;Parse Error&quot;;            break;
    case E_NOTICE:              print &quot;Notice&quot;;                 break;
    case E_CORE_ERROR:          print &quot;Core Error&quot;;             break;
    case E_CORE_WARNING:        print &quot;Core Warning&quot;;           break;
    case E_COMPILE_ERROR:       print &quot;Compile Error&quot;;          break;
    case E_COMPILE_WARNING:     print &quot;Compile Warning&quot;;        break;
    case E_USER_ERROR:          print &quot;User Error&quot;;             break;
    case E_USER_WARNING:        print &quot;User Warning&quot;;           break;
    case E_USER_NOTICE:         print &quot;User Notice&quot;;            break;
    case E_STRICT:              print &quot;Strict Notice&quot;;          break;
    case E_RECOVERABLE_ERROR:   print &quot;Recoverable Error&quot;;      break;
    default:                    print &quot;Unknown error ($errno)&quot;; break;
  }
  print &quot;:&lt;/b&gt; &lt;i&gt;$errstr&lt;/i&gt;\n&quot;;
  if(function_exists('debug_backtrace')){
    //print &quot;backtrace:\n&quot;;
    $backtrace = debug_backtrace();
    array_shift($backtrace);
    foreach($backtrace as $i=&gt;$l){
      print &quot;[$i] in function &lt;b&gt;{$l['class']}{$l['type']}{$l['function']}&lt;/b&gt;&quot;;
      if($l['file']) print &quot; in &lt;b&gt;{$l['file']}&lt;/b&gt;&quot;;
      if($l['line']) print &quot; on line &lt;b&gt;{$l['line']}&lt;/b&gt;&quot;;
      print &quot;\n&quot;;
    }
  }
  print &quot;\n&lt;/pre&gt;&quot;;
  if(isset($GLOBALS['error_fatal'])){
    if($GLOBALS['error_fatal'] &amp; $errno) die('fatal');
  }
}

function error_fatal($mask = NULL){
  if(!is_null($mask)){
      $GLOBALS['error_fatal'] = $mask;
  }elseif(!isset($GLOBALS['die_on'])){
      $GLOBALS['error_fatal'] = 0;
  }
  return $GLOBALS['error_fatal'];
}</pre>
<h2>¿Como se usa?</h2>
<p>Muy fácil:</p>
<pre class="brush: php;">set_error_handler('my_error_handler');</pre>
<p><strong>set_error_handler</strong> se encarga de enviar todos los errores a la función <strong>my_error_handler</strong>, la cual parsea, formatea e imprime en pantalla los errores.</p>
<p>Veamos la diferencia:</p>
<p><strong>Sin la función de errores:</strong></p>
<pre class="brush: php;">Fatal error: Un extraño error ha ocurrido. No le daré más información. in C:\AppServ\www\errores\db.php on line 9</pre>
<p><strong>Con la función de errores:</strong></p>
<pre class="brush: php;">User Error: Un extraño error ha ocurrido. No le daré más información.
[0] in function trigger_error in C:\AppServ\www\errores\db.php on line 9
[1] in function tierno_y_jugueton in C:\AppServ\www\errores\db.php on line 4
[2] in function dulce_conejito in C:\AppServ\www\errores\index.php on line 8</pre>
<p>Los números iniciales, significan el grado de &#8220;profundidad&#8221; del error. En este ejemplo, <strong>trigger_error</strong> está dentro de la función <strong>tierno_y_jugueton</strong>, que a su vez está dentro de la función <strong>dulce_conejito</strong>, que fué llamada desde index.php en la línea 8.</p>
<p>Puedes <a rel="nofollow" href="http://www.coders.me/ejemplos/errores-php/errores.zip">descargar el ejemplo</a> y comprobarlo tu mismo!</p>
<p>Realmente esto es muy útil de tener en cuenta para <strong>debuguear</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/en/php/errores-donde-cuando-y-porque/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Los Efectos Laterales</title>
		<link>http://www.coders.me//lang/en/errores-de-programacion/los-efectos-laterales</link>
		<comments>http://www.coders.me//lang/en/errores-de-programacion/los-efectos-laterales#comments</comments>
		<pubDate>Fri, 08 Aug 2008 17:57:10 +0000</pubDate>
		<dc:creator>Amir</dc:creator>
				<category><![CDATA[Errores de Programación]]></category>
		<category><![CDATA[fundamentos]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://www.coders.me/?p=227</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/errores-48x48.jpg" width="48" height="48" alt="" title="Errores de Programación" /><br/><h2>Los efectos laterales</h2>
<p>
Las <strong>modificaciones</strong> que se produzcan mediante una función o procedimiento en <strong>elementos situados fuera del subprograma</strong> se les conoce como “efectos laterales”, estos pueden ser en algunos casos beneficiosos a la hora de programar pero es conveniente NO recurrir a…</p>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/errores-48x48.jpg" width="48" height="48" alt="" title="Errores de Programación" /><br/><h2>Los efectos laterales</h2>
<p>
Las <strong>modificaciones</strong> que se produzcan mediante una función o procedimiento en <strong>elementos situados fuera del subprograma</strong> se les conoce como “efectos laterales”, estos pueden ser en algunos casos beneficiosos a la hora de programar pero es conveniente NO recurrir a ellos.
</p>
<p><a style="text-align:center" href="http://www.coders.me/wp-content/uploads/2008/08/efecto-lateral.gif"><img src="http://www.coders.me/wp-content/uploads/2008/08/efecto-lateral.gif" alt="" title="efecto-lateral" width="282" height="240" class="aligncenter size-medium wp-image-229" /></a></p>
<h2>En Procedimientos y funciones.</h2>
<p>
Cuando un procedimiento modifica una variable global  se le llama &#8220;efecto lateral&#8221;, esto no quiere decir que no se puedan utilizar variables globales dentro de procedimientos, si no que es necesario que al llamar (<del datetime="2008-08-08T15:43:09+00:00">al procedimiento</del>) la variable global sea introducida en este como parámetro, todo esto aplicará igualmente para las funciones que <em>de ninguna manera deberán manipular variables globales</em> para no interferir con el comportamiento correcto del programa.
</p>
<h2>Constantes son la excepción</h2>
<p>
En lenguajes de alto nivel donde existen las constantes, éstas si pueden ser utilizadas directamente en el procedimiento ya que de ninguna forma podrán ser modificadas dinámicamente
</p>
<h2>¿Por qué no usar &#8220;los efectos laterales&#8221;?</h2>
<p>Dos simples razones para <strong>NO utilizar</strong> los efectos laterales:
</p>
<ul>
<li>	Por que es perjudicial a la hora de programar</li>
<li>	Dificultan el mantenimiento del código.</li>
</ul>
<p>
Si alguien tiene una opinión diferente con respecto a utilizar los efectos laterales, que nos lo comente <img src='http://www.coders.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/en/errores-de-programacion/los-efectos-laterales/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Allowed memory size of&#8230;. Error en PHP</title>
		<link>http://www.coders.me//lang/en/errores-de-programacion/allowed-memory-size-of-error-en-php</link>
		<comments>http://www.coders.me//lang/en/errores-de-programacion/allowed-memory-size-of-error-en-php#comments</comments>
		<pubDate>Fri, 22 Feb 2008 16:13:01 +0000</pubDate>
		<dc:creator>Amir</dc:creator>
				<category><![CDATA[Errores de Programación]]></category>
		<category><![CDATA[errores]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.algoritmatica.com/errores-de-programacion/allowed-memory-size-of-error-en-php</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/errores-48x48.jpg" width="48" height="48" alt="" title="Errores de Programación" /><br/><p>El día de ayer aquí en la oficina me avisaron de que una aplicación web estaba fallando, tirando el mensaje</p>
<p><strong>Fatal Error: Allowed memory size of X bytes exhausted&#8230;.</strong></p>
<h3> Causa</h3>
<p>Esto sucede por que la app. necesita más memoria reservada para trabajar</p>
<h3> Solución</h3>
<p>Para solucionar…</p>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/errores-48x48.jpg" width="48" height="48" alt="" title="Errores de Programación" /><br/><p>El día de ayer aquí en la oficina me avisaron de que una aplicación web estaba fallando, tirando el mensaje</p>
<p><strong>Fatal Error: Allowed memory size of X bytes exhausted&#8230;.</strong></p>
<h3> Causa</h3>
<p>Esto sucede por que la app. necesita más memoria reservada para trabajar</p>
<h3> Solución</h3>
<p>Para solucionar este sencillo problema tenemos 3 opciones:</p>
<ol>
<li>Modificar el PHP.ini<br />
<blockquote><p>Ubicamos la variable <em><strong>memory_limi</strong></em>t y cambiamos su valor(por default 12M).</p></blockquote>
</li>
<li>Usar ini_set para cambiar la variable de configuración del php.ini directamente desde tu script<br />
<blockquote><p>La función que usaremos en este caso sería ini_set, de la siguiente forma:<br />
ini_set(&#8220;memory_limit&#8221;,&#8221;xM&#8221;); (siendo x la memoria reservada para el PHP).</p></blockquote>
</li>
<li>Creando un .htaccess o modificando el httpd.conf de apache.<br />
<blockquote><p>Modificando el .htacces o httpd.conf del apache y agregando la linea<br />
php_value memory_limit xM.</p></blockquote>
</li>
</ol>
<p><span id="more-101"></span></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6896919298908258";
/* Post Abajo Patrocinado Por (Grande) */
google_ad_slot = "5751554033";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>El valor que debes colocar depende de cuanta memoria reservada requiera tu script, en mi caso yo he colocado 50M y el script funciona de maravilla! <img src='http://www.coders.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hasta la próxima.!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/en/errores-de-programacion/allowed-memory-size-of-error-en-php/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

