<?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"
	>

<channel>
	<title>Blog de PHP - FinderIT</title>
	<atom:link href="http://blog.finderit.com/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.finderit.com/php</link>
	<description>Programación PHP</description>
	<pubDate>Mon, 23 Mar 2009 14:43:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Envio de Emails</title>
		<link>http://blog.finderit.com/php/2009/03/23/envio-de-emails/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/envio-de-emails/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:43:43 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=96</guid>
		<description><![CDATA[En este articulo aprenderemos a enviar emails (correo electrónico) de una forma compleja, gracias a mis experiencias.
Antes de nada recordaremos la chuleta:

.dma475 { width: 440px;}/*1*/




000
001
002




 &#60;?
mail(&#8220;destinatario&#8221;,&#8220;asunto&#8221;,&#8220;cuerpo&#8221;,&#8220;adicional&#8221;);
?&#62;  

 Maximizar   Seleccionar  PHP





Un ejemplo:






000
001
002




 &#60;?
mail(&#8220;webmaster@programacionweb.net&#8221;,&#8220;Ejemplo de envio&#8221;,&#8220;Este email ha sido enviado a:\n\n\twebmaster@programacionweb.net&#8221;,&#8220;Reply to: zarator@programacionweb.net&#8221;);
?&#62;  

 Maximizar   Seleccionar  PHP





Examinaremos esto &#8230; el mensaje se enviara a:
Destinatario: webmaster@programacionweb.net
Asunto: Ejemplo de envío
Responder [...]]]></description>
			<content:encoded><![CDATA[<p>En este articulo aprenderemos a enviar emails (correo electrónico) de una forma compleja, gracias a mis experiencias.</p>
<p>Antes de nada recordaremos la chuleta:<br />
<a name="codigo1"></a></p>
<div>.dma475 { width: 440px;}/*1*/</p>
<table id="t-codigo2332" style="border: 1px solid #c0c0c0" border="0" cellspacing="0" cellpadding="0" width="475">
<tbody>
<tr>
<td class="con" style="width: 35px" valign="top" bgcolor="#f5f5f5">
<div style="padding: 0px 0px 0px 10px;width: 35px"><span style="color: #005500"><code>000<br />
001<br />
002<br />
</code></span></div>
</td>
<td class="con" valign="top" bgcolor="#ffffff">
<div class="dma475" style="border: 1px solid #c0c0c0;margin: 3px;padding: 5px 10px">
<div style="text-align: left" dir="ltr"><code><span title="sin coloreado"> <span class="code_blue" title="PHP">&lt;?<br />
mail</span><span class="code_green" title="PHP"><span>(</span></span><span class="code_red">&#8220;destinatario&#8221;</span><span class="code_green" title="PHP">,</span><span class="code_red">&#8220;asunto&#8221;</span><span class="code_green" title="PHP">,</span><span class="code_red">&#8220;cuerpo&#8221;</span><span class="code_green" title="PHP">,</span><span class="code_red">&#8220;adicional&#8221;</span><span class="code_green" title="PHP"><span>)</span>;<br />
</span><span class="code_blue" title="PHP">?&gt;</span> </span> </code></div>
</div>
<div id="ctn2332" style="padding: 5px;font-size: 10px;float: left;width: 100%;font-family: sans-serif,arial;text-align: left"><a class="h_zoom" title="Ampliar / Reducir" href="void(null)"><img src="http://www.programacionweb.net/images/max.gif" border="0" alt="" height="10" /> Maximizar</a> <a class="h_select" title="Seleccionar" href="seleccionarCode%20(document.getElementById%20('t-codigo2332'))"> <img src="http://www.programacionweb.net/images/selecc.gif" border="0" alt="" height="10" /> Seleccionar</a> <a class="h_color" title="Mostrar / Ocultar colores" href="if(%20document.getElementById%20('t-codigo2332').className%20==%20''%20)%20void(document.getElementById%20('t-codigo2332').className%20=%20'bn');%20else%20void(document.getElementById%20('t-codigo2332').className%20=%20'')"><img src="http://www.programacionweb.net/images/colr.gif" border="0" alt="" height="10" /> PHP</a></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>Un ejemplo:<br />
<a name="codigo2"></a></p>
<div>
<table id="t-codigo9218" style="border: 1px solid #c0c0c0" border="0" cellspacing="0" cellpadding="0" width="475">
<tbody>
<tr>
<td class="con" style="width: 35px" valign="top" bgcolor="#f5f5f5">
<div style="padding: 0px 0px 0px 10px;width: 35px"><span style="color: #005500"><code>000<br />
001<br />
002<br />
</code></span></div>
</td>
<td class="con" valign="top" bgcolor="#ffffff">
<div class="dma475" style="border: 1px solid #c0c0c0;margin: 3px;padding: 5px 10px">
<div style="text-align: left" dir="ltr"><code><span title="sin coloreado"> <span class="code_blue" title="PHP">&lt;?<br />
mail</span><span class="code_green" title="PHP"><span>(</span></span><span class="code_red">&#8220;webmaster@programacionweb.net&#8221;</span><span class="code_green" title="PHP">,</span><span class="code_red">&#8220;Ejemplo de envio&#8221;</span><span class="code_green" title="PHP">,</span><span class="code_red">&#8220;Este email ha sido enviado a:\n\n\twebmaster@programacionweb.net&#8221;</span><span class="code_green" title="PHP">,</span><span class="code_red">&#8220;Reply to: zarator@programacionweb.net&#8221;</span><span class="code_green" title="PHP"><span>)</span>;<br />
</span><span class="code_blue" title="PHP">?&gt;</span> </span> </code></div>
</div>
<div id="ctn9218" style="padding: 5px;font-size: 10px;float: left;width: 100%;font-family: sans-serif,arial;text-align: left"><a class="h_zoom" title="Ampliar / Reducir" href="void(null)"><img src="http://www.programacionweb.net/images/max.gif" border="0" alt="" height="10" /> Maximizar</a> <a class="h_select" title="Seleccionar" href="seleccionarCode%20(document.getElementById%20('t-codigo9218'))"> <img src="http://www.programacionweb.net/images/selecc.gif" border="0" alt="" height="10" /> Seleccionar</a> <a class="h_color" title="Mostrar / Ocultar colores" href="if(%20document.getElementById%20('t-codigo9218').className%20==%20''%20)%20void(document.getElementById%20('t-codigo9218').className%20=%20'bn');%20else%20void(document.getElementById%20('t-codigo9218').className%20=%20'')"><img src="http://www.programacionweb.net/images/colr.gif" border="0" alt="" height="10" /> PHP</a></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>Examinaremos esto &#8230; el mensaje se enviara a:<br />
Destinatario: webmaster@programacionweb.net<br />
Asunto: Ejemplo de envío<br />
Responder a: zarator@programacionweb.net<br />
Cuerpo:<br />
Este email ha sido enviado a:</p>
<p>webmaster@programacionweb.net</p>
<p>Ahora veremos con detalle las partes de los emails:</p>
<blockquote><p><strong>Destinatario </strong><br />
El destinatario de un email será el email donde se enviará el email. Este campo es obligatorio ya que sin email no podrá enviar el mensaje.<br />
Podremos poner mail(&#8221;Pepe José &lt;elpepe@hotmail.com&gt;&#8221;, [...] o mail(&#8221;elpepe@hotmail.com&#8221;, [...] de las dos formas se pueden enviar.</p>
<p><strong>Asunto </strong><br />
El asunto de un mensaje es una introducción al contenido del mensaje. Este campo no es obligatorio ya que si no lleva asunto aparece (sin asunto), si el asunto es muy largo se te abreviará con &#8230; (tres puntos) .</p>
<p><strong>Cuerpo del Mensaje o Contenido</strong><br />
En el contenido del mensaje escribirás el motivo del email. No es obligatorio, pero por lógica deberías de escribir algo. El email puede ser de tres tipos (plano,html y mixto) pero mejor utilizar (plano y html)</p>
<blockquote><p>Si es Plano:</p>
<p>El mensaje será una línea de texto .. es decir no se ejecutará nada solo será texto, menos \x. Hay tres códigos \t, \n y \r (esto también se ejecuta en alertas html).</p>
<blockquote><p>\n = salto de línea<br />
\t = sangría<br />
\r = vuelta de línea</p></blockquote>
<div style="border: 2px dashed #dbdf00;padding: 5px"><span style="color: red"><strong>Nota:</strong></span><br />
En algunos programas o servidores se confunde \r con \n (salto de linea).</div>
</blockquote>
<blockquote>
<p><strong>Si es html: </strong><br />
Aquí se ejecuta todo tipo de html. Si el receptor del email usa hotmail deberás saber que este modifica los códigos como los &lt;a href=&#8217;[externo?id=tuweb]&#8216;&gt; (pone cabecera) &lt;p onclick=&#8221;&gt; (si antes era onclick=&#8217;a()&#8217; ahora se queda sin nada), es decir censura algunos códigos.</p>
<p>Este tipo de mensaje puede traerte problemas, ya hackers utilizan este método de email para que rescribas tu contraseña haciéndose pasar por un error. Puede ocultarse bien así que te recomiendo que no hagas mucho caso.</p></blockquote>
<blockquote><p>Fuente: http://www.programacionweb.net/articulos/articulo/?num=18</p></blockquote>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/envio-de-emails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>¿PHP o ASP?</title>
		<link>http://blog.finderit.com/php/2009/03/23/%c2%bfphp-o-asp/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/%c2%bfphp-o-asp/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:42:24 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=95</guid>
		<description><![CDATA[Cada día son más los programadores que utilizan PHP, actualmente el número de páginas que se apoyan en este lenguaje oscila en un 24%.
Para saber si una página está programada en PHP basta con que nos fijemos en la terminación de la URL, que será normalmente php, phtml. Ahora mismo PHP es el 4º lenguaje [...]]]></description>
			<content:encoded><![CDATA[<p>Cada día son más los programadores que utilizan <strong>PHP</strong>, actualmente el número de páginas que se apoyan en este lenguaje oscila en un 24%.</p>
<p>Para saber si una página está programada en PHP basta con que nos fijemos en la terminación de la URL, que será normalmente php, phtml. Ahora mismo PHP es el 4º lenguaje más popular:</p>
<p><a href="http://php.ciberaula.com/noticia/PHPpopularidad/"> http://php.ciberaula.com/noticia/PHPpopularidad/ </a></p>
<p>PHP es un lenguaje del lado del servidor, que se utiliza básicamente para generar páginas dinámicas y que facilita de forma sencilla el acceso a diferentes bases de datos. También se utiliza para generar imágenes , generar pdf…</p>
<p>PHP lo desarrollan programadores web introduciendo nuevas funciones en las  versiones mejoradas del lenguaje.</p>
<p>ASP realiza muchas tareas apoyándose en objetos que deben ser comprados a ciertas empresas especializadas, o en algunos casos programados por el servidor.</p>
<p>Los motivos de este progresivo ascenso de la utilización de PHP frente a otros lenguajes de scripting en el lado del servidor, y en concreto sobre el ASP (Active Server Pages) de Microsoft, son:</p>
<ul>
<li>Libre y Abierto (Código fuente disponible, es gratuito)</li>
<li>Multiplataforma: inicialmente fue diseñado para entornos UNIX por lo que ofrece más prestaciones en este sistema operativo, pero es perfectamente compatible con Windows. ASP, sólo está orientado a sistemas Windows&#8230;</li>
<li>Soporte para varios servidores web</li>
<li>Fácil acceso a Bases de Datos</li>
<li>Mucha documentación (Ejemplos, manuales..)</li>
<li>Presenta una integración perfecta entre Apache-PHP-MySQL</li>
<li>Posee una sintaxis bastante clara</li>
<li>Fácil aprendizaje</li>
<li>Seguro</li>
<li>Popular (¿Quién no ha oido hablar de PHP? <img src='http://blog.finderit.com/php/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</li>
<li>Además PHP está orientado a objetos</li>
</ul>
<p>PHP presenta una desventaja frente al lenguaje ASP y es que posee una peor integración con el paquete Office de Microsoft, ya que Microsoft no facilita las especificaciones del mismo.</p>
<p>Para terminar, repito la pregunta con la que abría el artículo: <strong>¿PHP o ASP?</strong></p>
<p>Fuente: http://php.ciberaula.com/articulo/PHPoASP/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/%c2%bfphp-o-asp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lecciones aprendidas sobre rendimiento en PHP</title>
		<link>http://blog.finderit.com/php/2009/03/23/lecciones-aprendidas-sobre-rendimiento-en-php/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/lecciones-aprendidas-sobre-rendimiento-en-php/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:40:49 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=94</guid>
		<description><![CDATA[A partir del artículo publicado por Enrique sobre rendimiento y programación orientada a objetos, me he animado a compartir las lecciones aprendidas que hemos sacado Iñaki Ortiz y yo, de nuestra experiencia tras reescribir www.precriticas.com con el Zend Framework. Precriticas es un proyecto con más de 5000 visitantes únicos diarios (y picos de 8.000) que [...]]]></description>
			<content:encoded><![CDATA[<p>A partir del <a href="http://phpsenior.blogspot.com/2008/12/rendimiento-conviene-utilizar-poo.html">artículo publicado por Enrique sobre rendimiento y programación orientada a objetos</a>, me he animado a compartir las <strong>lecciones aprendidas</strong> que hemos sacado Iñaki Ortiz y <a href="http://www.programania.net/artola/">yo</a>, de nuestra experiencia tras <a href="http://www.programania.net/php/nuevo-precriticas/">reescribir www.precriticas.com con el Zend Framework</a>. <a href="http://www.precriticas.com/">Precriticas</a> es un proyecto con más de 5000 visitantes únicos diarios (y picos de 8.000) que generan diariamente más de 25.000 recargas de la página.</p>
<p>Lecciones aprendidas:</p>
<ul>
<li>La optimización extrema del código (cambiar print por echos, etc…) apenas mejora el rendimiento.</li>
<li>La POO disminuye el rendimiento, pero facilita tanto la programación que es totalmente IMPRESCINDIBLE.</li>
<li>No hay que caer en la sobreingeniería (overengineering), ni matar moscas a cañonazos. Quizá no sean soluciones muy elegantes, pero a veces un par de arrays y unas funciones son mucho más eficaces que complejos patrones de diseño orientado a objetos.</li>
</ul>
<p>Las dos cosas que más eficaces resultan para mejorar rendimiento son:</p>
<ol>
<li><strong>evitar SQL´s excesivamente costosas</strong> (subquerys, demasiados<em> inner join´s</em>) o bucles de SQL´s que se repiten una enorme cantidad de veces innecesariamente. (<a href="http://framework.zend.com/manual/en/zend.db.html">ojo a prepared statement</a>).</li>
<li><strong>cachear requests (páginas enteras) o las sql´s costosas</strong>. (<a href="http://framework.zend.com/manual/en/zend.cache.html">ojo a zend_cache</a>).</li>
</ol>
<p>Y un apunte sobre <strong>Zend_cache</strong>. Es muy potente, pero nos ha dado problemas. Al principio funcionó bien, pero si decides cachear muchas páginas, genera miles de archivos y el acceso al sistema de archivos se convierte en un cuello de botella… Ahora mismo no lo estamos utilizando aunque planeamos cachear algunas páginas.</p>
<p>Y una última cosa: a veces uno está pensando en complicadas soluciones (por ejemplo para buscar sql´s costosas) y entonces llega <a href="http://www.guebs.com/">la gente que sabe</a>, y te descubre que <a href="http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html">basta con activar un log</a>.</p>
<p>Fuente: http://www.programania.net/patrones-de-diseno/lecciones-aprendidas-sobre-rendimiento-en-php/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/lecciones-aprendidas-sobre-rendimiento-en-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lecciones aprendidas sobre tasa de transferencia en PHP</title>
		<link>http://blog.finderit.com/php/2009/03/23/lecciones-aprendidas-sobre-tasa-de-transferencia-en-php/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/lecciones-aprendidas-sobre-tasa-de-transferencia-en-php/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:39:01 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=93</guid>
		<description><![CDATA[Tras el artículo anterior,  Iñaki Ortiz y yo hemos decdido ir publicando, de vez en cuando, nuestras experiencias en el desarrollo de www.precriticas.com. En éste caso queremos compartir técnicas que nos han resultado realmente efectivas a la hora de reducir la tasa de transferencia consumida por la web. Hay que tener en cuenta que los [...]]]></description>
			<content:encoded><![CDATA[<p>Tras el <a href="http://www.programania.net/patrones-de-diseno/lecciones-aprendidas-sobre-rendimiento-en-php/">artículo anterior</a>,  Iñaki Ortiz y yo hemos decdido ir publicando, de vez en cuando, nuestras experiencias en el desarrollo de <a href="http://www.precriticas.com/">www.precriticas.com</a>. En éste caso queremos compartir técnicas que nos han resultado realmente efectivas a la hora de reducir la tasa de transferencia consumida por la web. Hay que tener en cuenta que los hostings te cobran en función de la tasa de transferencia consumida, así que <strong>ahorrar tasa de transferencia es ahorrar dinero</strong>.</p>
<ol>
<li><strong>Utiliza <a href="http://developer.yahoo.com/yslow/">ySlow</a></strong> para diagnosticar tu sitio. <strong>ySlow</strong> te ayuda a medir el rendimiento de tu sitio. Así que quizá debería haberlo incluido en el <a title="consejos sobre rendimiento" href="http://www.programania.net/patrones-de-diseno/lecciones-aprendidas-sobre-rendimiento-en-php/">artículo sobre rendimiento</a> escrito anteriormente. Pero también evalua si comprimes el html, las css o el javascript.</li>
<li><strong>ob_start(’ob_gzhandler’)</strong>: con ésta sencilla instrucción hemos reducido un consumo diario de 1,5GB de transferencia a 660Mb. Casi un tercio. Se trata de una instrucción de php que hay que poner antes de generar el html para que así se envíe al navegaor comprimido. Da algunos problemas a la hora de integrarlo con el <a title=&#8221;art</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/lecciones-aprendidas-sobre-tasa-de-transferencia-en-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Novedades SPL en PHP 5.3</title>
		<link>http://blog.finderit.com/php/2009/03/23/novedades-spl-en-php-53/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/novedades-spl-en-php-53/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:37:52 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=92</guid>
		<description><![CDATA[PHP 5.3 parece que cada vez está más cerca. Todavía queda tiempo para ir analizando las novedades que tendrá. Una de las mejoras será en las estructuras de datos que se podrán manejar de forma nativa (mediante la extension spl). Y es que no se puede hacer todo con un simple array.

SplDoublyLinkedList: que permite recorrer [...]]]></description>
			<content:encoded><![CDATA[<p>PHP 5.3 parece que cada vez está más cerca. Todavía queda tiempo para ir analizando las novedades que tendrá. Una de las <a href="http://schlueters.de/blog/archives/90-Data-structures-in-PHP-5.3.html">mejoras será en las estructuras de datos</a> que se podrán manejar de forma nativa (mediante la <a href="http://www.php.net/%7Ehelly/php/ext/spl/">extension spl</a>). Y es que no se puede hacer todo con un simple array.</p>
<ul>
<li>SplDoublyLinkedList: que permite recorrer la lista en dos direcciones.</li>
<li>SplStack: que emula a una Pila LIFO (Last Input First Output).</li>
<li>SplQueue (SplPriorityQueue): que emula a una Cola FIFO (First Input First Output).</li>
<li>SplHeap (SplMinHeap, SplMaxHeap): introduces elementos en la estructura y te los devuelve ordenados de menor a mayor (MinHeap) o viceversa (MaxHeap).</li>
<li>SplFixedArray: básicamente un array de tamaño fijo.</li>
</ul>
<p>Sin duda, éstas estructuras pueden ahorrarnos mucho trabajo!</p>
<p>Fuente: http://www.programania.net/patrones-de-diseno/novedades-spl-en-php-53/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/novedades-spl-en-php-53/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP o Ruby on Rails y TDD (Test Driven Development)</title>
		<link>http://blog.finderit.com/php/2009/03/23/php-o-ruby-on-rails-y-tdd-test-driven-development/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/php-o-ruby-on-rails-y-tdd-test-driven-development/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:36:43 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=91</guid>
		<description><![CDATA[He aquí una discusión interesante. Hay gente que afirma que puede confiar más en los programas desarrollados en Java que en los desarrollados en PHP o RoR por el simple hecho de que el primero se compila antes de ejecutarse mientras los segundos (o cualquier otro lenguaje de scripting) no.
Siguiendo esa misma idea, los defensores [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.jayfields.com/2008/02/ruby-did-tdd-make-ruby-viable-option.html">He aquí una discusión interesante.</a> Hay gente que afirma que puede confiar más en los programas desarrollados en Java que en los desarrollados en PHP o RoR por el simple hecho de que el primero se compila antes de ejecutarse mientras los segundos (o cualquier otro lenguaje de scripting) no.</p>
<p>Siguiendo esa misma idea, los defensores de los lenguajes de scripting afirman que el uso de Test Driven Development (escribir pruebas unitarias, antes de escribir la clase que prueban) equilibra la balanza. Puesto que ahora la clave para validar nuestras aplicaciones antes de ejecutarlas <strong>no se encuentra en si compila o no, sino que se encuentra en si pasa todas las pruebas unitarias o no</strong>.</p>
<p>El artículo que referencio viene a decir que no se puede confiar en una aplicación que no se desarrolla mediante TDD o que, al menos, no se encuentra probada en su totalidad por pruebas unitarias.</p>
<p>Yo no estoy de acuerdo. Utilizo las pruebas unitarias si, pero sólo lo hago cuando quiero probar una clase en concreto, que tenga cierta complejidad. En el escenario de desarrollo en que yo me muevo la lógica de negocio no suele ser muy compleja (mucho añadir, listar, modificar, eliminar…) con lo que me centro más en dirigir <a href="http://www.programania.net/desarrollo-agil/tdd-test-driven-development/getting-real-template-driven-development/">mi desarrollo por las Vistas</a>, más que por las pruebas unitarias.</p>
<p>Fuente: http://www.programania.net/desarrollo-agil/php-o-ruby-on-rails-y-tdd-test-driven-development/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/php-o-ruby-on-rails-y-tdd-test-driven-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Evaluando Zend Studio</title>
		<link>http://blog.finderit.com/php/2009/03/23/evaluando-zend-studio/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/evaluando-zend-studio/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:34:14 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=90</guid>
		<description><![CDATA[Se trata de un programa de la casa Zend, impulsores de la tecnología de servidor PHP, orientada a desarrollar aplicaciones web, como no, en lenguaje PHP.
El programa,
además de servir de editor de texto para páginas PHP, proporciona una serie
de ayudas que pasan desde la creación y gestión de proyectos hasta la depuración
de código.
El programa entero [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Se trata de un programa de la casa Zend, impulsores de la tecnología de servidor PHP, orientada a desarrollar aplicaciones web, como no, en lenguaje PHP.</span></p>
<p>El programa,<br />
además de servir de editor de texto para páginas PHP, proporciona una serie<br />
de ayudas que pasan desde la creación y gestión de proyectos hasta la depuración<br />
de código.</p>
<p>El programa entero está escrito en Java, lo que a veces supone que no funcione<br />
tan rápido como otras aplicaciones de uso diario. Sin embargo, esto ha permitido<br />
a Zend lanzar con relativa facilidad y rapidez versiones del producto para<br />
Windows, Linux y MacOS, aunque el desarrollo de las versiones de este último<br />
sistema se retrase un poco más.</p>
<p>Zend Studio consta de dos partes en las que se dividen las funcionalidades<br />
de parte del cliente y las del servidor. Las dos partes se instalan por separado,<br />
la del cliente contiene el interfaz de edición y la ayuda. Permite además<br />
hacer depuraciones simples de scripts, aunque para disfrutar de toda la potencia<br />
de la herramienta de depuración habrá que disponer de la parte del servidor,<br />
que instala Apache y el módulo PHP o, en caso de que estén instalados, los<br />
configura para trabajar juntos en depuración.</p>
<h3>El editor</h3>
<p>La parte del programa que nos permite escribir los scripts es bastante útil<br />
para la programación en PHP. La interfaz está compuesta por varias partes,<br />
en las que encontramos un explorador de archivos, una ventana de depuración,<br />
los menús y otra para mostrar el código de las páginas.</p>
<p><img class="centro" src="http://www.maestrosdelweb.com/images/editorial/zendstudio_1.gif" alt="Interfaz de Zend Studio" width="450" height="324" /></p>
<p>Lo más<br />
destacable es que contiene una ayuda contextual con todas las librerías de<br />
funciones del lenguaje que asiste en todo momento ofreciendo nombres de las<br />
funciones y parámetros que deben recibir. Aunque esta ayuda contextual no<br />
solo se queda en las funciones definidas en el lenguaje, sino que también<br />
reporta ayudas con las funciones que vayamos creando nosotros, incluso en<br />
páginas que tengamos incluidas con la función include().</p>
<p>Otras ayudas que ofrece a la hora de escribir son las típicas en editores<br />
avanzados, como permitir editar varios archivos, y moverse fácilmente entre<br />
ellos, marcar a qué elementos corresponden los inicios y cierres de las etiquetas,<br />
paréntesis o llaves, moverse al principio o al final de una función, identificación<br />
automática del código, etc.</p>
<p>Sin embargo y si nos ponemos exigentes, las funciones de edición podrían trabajarse<br />
más todavía. Habrá que esperar a otras versiones en las que es de suponer<br />
que incluirán avances en este aspecto. Se hecha en falta una herramienta de<br />
buscar y reemplazar más potente, un poco más de velocidad en los menús y cambios<br />
de archivos. Además, las ayudas en el lenguaje HTML son pobres para los que<br />
han probado otros editores como Homesite.</p>
<p>En la parte novedosa de edición que no habíamos probado en otros programas<br />
están los Bookmarks, que nos permiten dirigirnos rápidamente a un punto exacto<br />
del código de cualquier archivo. De todos modos, es importante decirlo, las<br />
cualidades de Zend Studio que seguro cautivarán a los programadores a los<br />
que va dirigido no debemos buscarlas en la parte de edición sino en las posibilidades<br />
de gestión de proyectos y depuración.</p>
<h3>Gestión de proyectos</h3>
<p>La barra de la izquierda, que permite navegar los archivos de nuestro ordenador,<br />
también dispone de herramientas para gestionar los proyectos, muy útiles para<br />
mejorar la productividad en la programación. Los proyectos permiten guardar<br />
mucha más información al programa sobre los archivos, discos, servidores,<br />
etc. que se gestionen en nuestras aplicaciones PHP.</p>
<p>Una vez los archivos se han añadido al proyecto se pueden guardar señales<br />
como puntos de ruptura en las depuraciones, asimismo, cuando ponemos en marcha<br />
Zend Studio, se vuelven a abrir los archivos que estuvieran abiertos la última<br />
vez que el programa se cerró y las herramientas de completar código mejoran<br />
sus comportamientos, asumiendo toda la información de los archivos relacionados<br />
con el proyecto.</p>
<p>Zend Studio implementa además unas interesantes opciones para trabajar en<br />
grupo, al integrar el sistema de trabajo conocido como CVS.</p>
<h3>La herramienta de depuración</h3>
<p>Sin duda más de una vez los programadores de PHP se han visto en un duro problema<br />
por no encontrar un error en algún script que está haciendo devuelva resultados<br />
inesperados. En estos casos lo que se suele hacer es escribir el contenido<br />
de diversas variables en la página web y rezar para que nos den algún indicio<br />
del lugar donde está el error.</p>
<p>Para hacernos la vida más fácil en estas tesituras Zend Studio dispone de<br />
una herramienta muy interesante de debug o depuración. Gracias a ella podemos<br />
ejecutar páginas y conocer en todo momento el contenido de las variables de<br />
la aplicación y las variables del entorno como las cookies, las recibidas<br />
por formulario o en la sesión. Podemos colocar puntos de parada de los scripts<br />
y realizar las acciones típicas de depuración.</p>
<p>Además de la ventana para visualizar el contenido de las variables, dispone<br />
de otras donde muestra la salida del script según se va generando, y otra<br />
donde se pueden ver las alertas y errores. Las posibilidades se completan<br />
con distintos tipos de depuración, en local, en remoto o a partir de una URL.</p>
<p><img class="centro" src="http://www.maestrosdelweb.com/images/editorial/zendstudio_2.gif" alt="Depuración de Zend Studio" width="450" height="325" /></p>
<h3>Valoración final</h3>
<p>El software se puede descargar desde<br />
la página de Zend y nos permite utilizarlo durante 30 días, después de los<br />
cuales se deshabilitan ciertas opciones. El precio de la versión sin límite<br />
de uso es de 195 dólares, que incluye tanto Zend Studio Client como Server.</p>
<p>Si deseamos aumentar la productividad en nuestros desarrollos PHP no cabe<br />
duda que este programa puede ayudarnos seriamente. Todas las opciones que<br />
dispone están pensadas con acierto por personas que conocen como nadie la<br />
tecnología. Zend Studio incorpora suficientes ayudas como para que merezca<br />
la pena la compra.</p>
<p>Fuente: http://www.maestrosdelweb.com/editorial/zendstudio/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/evaluando-zend-studio/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zend Framework 1.7.0 Preview Release</title>
		<link>http://blog.finderit.com/php/2009/03/23/zend-framework-170-preview-release/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/zend-framework-170-preview-release/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:32:53 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=89</guid>
		<description><![CDATA[Se encuentra disponible el Preview de Zend Framework 1.7, este Framework tiene las ventajas de ser uno de los mas robustos, y tener el apoyo de Zend, aunque realmente no es el mas utilizado siendo otras opciones como Cake PHP y CodeIgniter los preferidos.
Zend y Adobe están planeando liberar Zend Framework 1.7 con soporte Zend_AMF [...]]]></description>
			<content:encoded><![CDATA[<p>Se encuentra disponible el Preview de <strong>Zend Framework 1.7</strong>, este Framework tiene las ventajas de ser uno de los mas robustos, y tener el apoyo de Zend, aunque realmente no es el mas utilizado siendo otras opciones como Cake PHP y <strong><a href="http://www.jorgeoyhenard.com/codeigniter-170-released/218/" target="_blank">CodeIgniter</a></strong> los preferidos.</p>
<p>Zend y Adobe están planeando liberar <strong>Zend Framework 1.7</strong> con soporte Zend_AMF en Adobe Max 2008, ambas compañías habían anunciado en setiembre su trabajo en conjunto para hacer mas fácil desarrollar aplicaciones ricas RIA (Rich Internet Applications), basadas en PHP y el framework Flex gratuito.</p>
<p>Como parte de esta colaboración Adobe ayudara a integrar AMC (Action Message Format) en el Zend Framework, lo que habilitara la integración entre las aplicaciones PHP en el servidor y Flex data del lado del cliente y componentes lógicos, para aplicaciones que requieren un gran ancho de banda de datos.</p>
<p>Zend exhibirá el Adobe Max en el Moscone Center del 16 al 19 de Noviembre en San Francisco, USA,<br />
Adobe Max tiene como fuerte la arquitectura, diseño, desarrollo y distribución de las RIAs.</p>
<h3>Zend Framework 1.7</h3>
<ul>
<li> <strong>Zend_AMF</strong> basado en <a href="http://www.amfphp.org/">amfphp</a> como decíamos permite conectar PHP vs Flash y Flex</li>
<li><strong>Dojo Toolkit 1.2.0</strong> soporta las nuevas funcionalidades de esta versión 1.2.0</li>
<li> <strong>ZendX_JQuery</strong> trabajar con JQuery</li>
<li> <strong>Support for dijit editor</strong> soporta el Dijit Editor</li>
<li> <strong>Metadata API in Zend_Cache</strong></li>
<li> <strong>Google book search API</strong> agrega funcionalidad para esta API<strong><br />
</strong></li>
<li> <strong>Performance enhancements</strong></li>
<li> <strong>Application-wide locale with other i18n enhancements</strong></li>
<li> <strong>File upload form element enhancements</strong></li>
</ul>
<p><a title="Zend Framework " href="http://framework.zend.com/download/latest" target="_blank"><strong>Fuente: http://www.jorgeoyhenard.com/zend-framework-170-preview-release/281/<br />
</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/zend-framework-170-preview-release/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Empezando con Zend Framework.</title>
		<link>http://blog.finderit.com/php/2009/03/23/empezando-con-zend-framework/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/empezando-con-zend-framework/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:30:24 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=88</guid>
		<description><![CDATA[El otro día me encontré con una persona que se resistía a usa frameworks por el alto costo de aprendizaje que estos requerían. Si bien tiene cierto costo de aprendizaje, ese costo a mediano plazo es totalmente redituable.  Esto lo digo porque varias veces he leído por ahí, gente buscando alguna librería para que maneje [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día me encontré con una persona que se resistía a usa frameworks por el alto costo de aprendizaje que estos requerían. Si bien tiene cierto costo de aprendizaje, ese costo a mediano plazo es totalmente redituable.  Esto lo digo porque varias veces he leído por ahí, gente buscando alguna librería para que maneje la conexion a la base de datos, otra para hacer un paginador, otra para el manejo del <span class="misspell">access</span> <span class="misspell">controll</span> <span class="misspell">list</span> (<span class="misspell">ACL</span>), entre otras; y lo que nos da este framework, es una solución para los problemas mas comunes, así evitamos rompernos la cabeza buscando la mejor solución, porque esto ya lo tenemos en Zend Framework. Si analizamos esto, aprender a implementar una solución, es <span class="misspell">muchisimo</span> mas fácil que crearla, y este es el costo de aprendizaje de Zend Framework. Por esto, voy a tratar de explicar de la mejor manera como empezar a trabajar con un proyecto hecho enteramente en Zend Framework, aprovechando todos sus componentes a la medida que lo necesitemos. </p>
<p>1- Estructura de directorios.</p>
<p>Lo primero que necesitamos hacer es definir nuestra estructura básica de directorios. Nuestra estructura tiene que tener una carpeta donde podamos guardar nuestros archivos de acceso publico, como <span class="misspell">css</span>, <span class="misspell">jpeg</span>, <span class="misspell">avi</span>, <span class="misspell">swf</span>, etc. Esa carpeta en nuestro caso se va a llamar html/, la cual contendrá una carpeta <span class="misspell">css</span>/, otra <span class="misspell">images</span>/ y  por ultimo una carpeta <span class="misspell">js</span>/ por ahora. <br />Esta carpeta también contendrá nuestro <span class="misspell">bootstrap</span>, el cual se va a encargar de llamar al modulo que corresponda, y otros menesteres.  </p>
<p>Necesitamos una carpeta para nuestros componentes y los de Zend Framework, y para eso vamos a usar <span class="misspell">library</span>/. Dentro de la carpeta <span class="misspell">library</span> vamos a tener una carpeta Me/ y otra Zend/, en la primera por ahora no vamos a tener nada pero la idea es que cada componente que propio, lo colguemos en esa carpeta, Zend/ contendrá los componentes de Zend Framework. </p>
<p>Los módulos de nuestros sistemas van a estar compuestos de tres partes, controlador, modelo, y vista (<span class="misspell">MVC</span>). Para esto vamos a crear una carpeta llamada <span class="misspell">apps</span>/, en la cual vamos a tener una carpeta <span class="misspell">controllers</span>, otra <span class="misspell">models</span>, y otra <span class="misspell">views</span>.</p>
<p>Necesitamos una carpeta para guardar todos nuestros archivos de <span class="misspell">configuracion</span>, para seguir ejercitando nuestro lado creativo vamos a llamarla <span class="misspell">config</span>/. Y otra carpeta para nuestros <span class="misspell">layouts</span>, que la vamos a llamar con el mismo nombre. </p>
<p>A partir de lo que mencionamos anteriormente, nuestra estructura de directorios tendría que quedarnos de la siguiente manera. </p>
<div id="y3t1" style="padding: 1em 0pt;text-align: left">
<div id="dq23" style="padding: 1em 0pt;text-align: left">
<div id="" style="padding: 1em 0pt;text-align: left"><img style="width: 210px;height: 348px" src="http://docs.google.com/File?id=dcz4grwr_207g2tvwccc_b" alt="" /></div>
<p>Una vez definida nuestra estructura de directorio como siguiente paso vamos a incorporar los componentes de Zend Framework a nuestro proyecto. Hay varias formas de hacerlo, la que uso yo para no ocupar espacio innecesario en duplicar <span class="misspell">ZF</span> es crear una carpeta Zend, en alguna parte de mi sistema, y a partir de ahí crear <span class="misspell">symlinks</span> a cada proyecto, de esta forma, solo tengo una copia de <span class="misspell">ZF</span>, y cada vez que hay alguna <span class="misspell">actualizacion</span> de <span class="misspell">ZF</span> solo actualizo una carpeta.</p>
</div>
</div>
<p>Supongamos que nosotros tenemos en /<span class="misspell">usr</span>/local/Zend/apache2/<span class="misspell">htdocs</span>/ nuestros proyectos, y en ese mismo lugar una carpeta Zend, con todos los componentes de Zend Framework. </p>
<p>Abrimos una consola y ejecutamos el siguiente comando.</p>
<p><em>$ <span class="misspell">ln</span> -s /<span class="misspell">usr</span>/local/Zend/apache2/<span class="misspell">htdocs</span>/Zend/ /<span class="misspell">usr</span>/local/Zend/apache2/<span class="misspell">htdocs</span>/proyecto/<span class="misspell">library</span>/Zend</em></p>
<p>2- <span class="misspell">Bootstrap</span>.<br />El próximo paso es configurar nuestro <span class="misspell">bootstrap</span>. El cual va a estar dentro de nuestra carpeta html, y vamos a llamarlo index.php.</p>
<div class="dean_ch">
<ol>
<li class="li1">
<div class="de1"></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/set_include_path"><span class="kw3">set_include_path</span></a><span class="br0">(</span><span class="st0">‘library’</span> . PATH_SEPARATOR .</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">‘config’</span> . PATH_SEPARATOR .</div>
</li>
<li class="li2">
<div class="de2"><span class="st0">‘apps/models’</span> . PATH_SEPARATOR .</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">‘apps/controllers’</span> . PATH_SEPARATOR . PATH_SEPARATOR .</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/get_include_path"><span class="kw3">get_include_path</span></a><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI"> * Carga las clases que sean necesarias</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI"> */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span> <span class="st0">&#8220;Zend/Loader.php&#8221;</span>;</div>
</li>
<li class="li1">
<div class="de1">Zend_Loader::<span class="me2">registerAutoload</span><span class="br0">(</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI"> * Configuración inicial</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI"> */</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/error_reporting"><span class="kw3">error_reporting</span></a><span class="br0">(</span><span class="kw2">E_ALL</span> | E_STRICT<span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1">date_default_timezone_set<span class="br0">(</span><span class="st0">‘America/Buenos_Aires’</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI"> * Setup controller</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI"> */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$controller</span> = Zend_Controller_Front::<span class="me2">getInstance</span><span class="br0">(</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$controller</span>-&gt;<span class="me1">setControllerDirectory</span><span class="br0">(</span> <span class="st0">‘../apps/controllers’</span> <span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$controller</span>-&gt;<span class="me1">throwExceptions</span><span class="br0">(</span> <span class="kw2">true</span> <span class="br0">)</span>; <span class="co1">//Inicialmente esta en true, cuando pasemos a produccion deberia estar en false</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// DISPATCH!</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$controller</span>-&gt;<span class="me1">dispatch</span><span class="br0">(</span><span class="br0">)</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"></div>
</li>
</ol>
</div>
<p>La idea es que nuestro <span class="misspell">bootstrap</span> no sea demasiado complejo. Primero vamos a definir el <span class="misspell">path</span> de nuestros directorios, a los cuales queremos acceder de forma <span class="misspell">facil</span>. Mas adelante hablaremos del componente Zend_<span class="misspell">Loader</span>, y que es el <span class="misspell">registerAutoload</span>. <span class="misspell">Ademas</span> le indicamos que nos muestre todos los errores, y los problemas de versiones. Y por ultimo, le decimos que ejecute el modulo que corresponda, y que lo busque en nuestra carpeta <span class="misspell">apps</span>/<span class="misspell">controllers</span>/</p>
<p>3- Configuramos el ambiente, y las reglas de <span class="misspell">Rewrite</span></p>
<p>Lo siguiente a crear son las reglas de <span class="misspell">rewrite</span> para que se <span class="misspell">redireccione</span> al <span class="misspell">bootstrap</span> cada vez que se requiera algo, salvo en el caso que sea un <span class="misspell">js</span>, <span class="misspell">css</span>, <span class="misspell">jpeg</span>, o cualquier <span class="misspell">extension</span> que no sea necesario procesarla desde el <span class="misspell">bootstrap</span>. </p>
<p>Nuestro archivo .<span class="misspell">htaccess</span> <span class="misspell">tambien</span> va a estar dentro de la carpeta html/ y tiene que tener el siguiente contenido. </p>
<p><span class="misspell">RewriteEngine</span> <span class="misspell">on</span><br /><span class="misspell">RewriteRule</span> !\.(<span class="misspell">js</span>|<span class="misspell">ico</span>|<span class="misspell">gif</span>|<span class="misspell">jpg</span>|<span class="misspell">png</span>|<span class="misspell">css</span>)$ <span class="misspell">index</span>.php</p>
<p>Ahora necesitamos configurar nuestro virtual <span class="misspell">host</span>, para eso editamos el archivo <span class="misspell">httpd</span>.<span class="misspell">conf</span> de apache, al final de todo ingresamos el siguiente <span class="misspell">codigo</span></p>
<p>&lt;<span class="misspell">VirtualHost</span> *:80&gt;<br /> <span class="misspell">ServerAdmin</span> admin@admin.com<br /> <span class="misspell">DocumentRoot</span> “/<span class="misspell">usr</span>/local/Zend/apache2/<span class="misspell">htdocs</span>/proyecto/html”<br /> <span class="misspell">ServerName</span> www.proyecto.com<br /> <span class="misspell">ServerAlias</span> www.proyecto.com<br /> <span class="misspell">ErrorLog</span> <span class="misspell">logs</span>/proyecto-error_<span class="misspell">log</span><br /> <span class="misspell">CustomLog</span> <span class="misspell">logs</span>/proyecto-error_<span class="misspell">log</span> <span class="misspell">common</span><br /> &lt;/<span class="misspell">VirtualHost</span>&gt;</p>
<p>Por ultimo en nuestro /etc/<span class="misspell">hosts</span> agregamos la siguiente linea.</p>
<p>127.0.0.1  www.proyecto.com</p>
<p>4- Crear nuestro primer modulo</p>
<p>Una vez reiniciado el apache, en nuestro <span class="misspell">browser</span> escribimos nuestra url de prueba. www.proyecto.com y si hicimos las cosas bien, nos aparece el siguiente error. </p>
<div id="zr3e" style="padding: 1em 0pt;text-align: left"><img style="width: 600px;height: 134px" src="http://docs.google.com/File?id=dcz4grwr_203d3x8vnd6_b" alt="" /></div>
<p>Los que nos dice esta <span class="misspell">excepcion</span>, es que nos falta nuestro <span class="misspell">controller</span> <span class="misspell">default</span> que es <span class="misspell">index</span>. </p>
<p>Para esto tenemos que crear dentro dentro de nuestra carpeta <span class="misspell">apps</span>/<span class="misspell">controllers</span>, un archivo con el nombre <span class="misspell">IndexController</span>.php, el cual va a ser nuestro archivo principal.</p>
<p><em>IndexController.php</em></p>
<div class="dean_ch">
<ol>
<li class="li1">
<div class="de1"></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> IndexController <span class="kw2">extends</span> Zend_Controller_Action</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">{</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">public</span> <span class="kw2">function</span> indexAction<span class="br0">(</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li2">
<div class="de2"></div>
</li>
</ol>
</div>
<p>Cada vez que nosotros <span class="misspell">necesitaramos</span> agregar un modulo por ejemplo, un modulo de usuarios, tenemos que crear un controlador para ese modulo. Cada <span class="misspell">accion</span> que podamos ver en nuestro modulo, va a estar representado por un <span class="misspell">metodo</span> con el nombre de la <span class="misspell">accion</span> mas la palabra <span class="misspell">Action</span>, de esta forma, Zend_<span class="misspell">Controller</span>_<span class="misspell">Action</span> identifica que es una <span class="misspell">accion</span> valida. </p>
<p>En el ejemplo nosotros estamos usando <span class="misspell">Index</span> como modulo, e <span class="misspell">index</span> como <span class="misspell">accion</span>, en nuestro caso, a ser la <span class="misspell">accion</span> <span class="misspell">default</span> no necesitamos agregar en nuestra url, el nombre del modulo, y el nombre de la <span class="misspell">accion</span>, aunque si lo hacemos nos anda igual, por ejemplo si <span class="misspell">tipeamos</span> www.proyecto.com/index/index/ vamos a tener el mismo resultado que www.proyecto.com o que www.proyecto.com/index/, eso es porque <span class="misspell">ZF</span> interpreta que sino se especifica un modulo en la url, estamos hablando del modulo <span class="misspell">default</span> (<span class="misspell">Index</span> en nuestro caso), lo mismo con la <span class="misspell">accion</span>. </p>
<p>Si nosotros queremos ver nuestro modulo de usuarios a la <span class="misspell">accion</span> <span class="misspell">default</span>, nuestra url seria la siguiente http://www.proyecto.com/usuarios, si queremos referirnos a la <span class="misspell">accion</span> <span class="misspell">read</span>, <span class="misspell">deberiamos</span> llamarlo <span class="misspell">asi</span> http://www.proyecto.com/usuarios/read/. </p>
<p>En <span class="misspell">articulos</span> anteriores vimos un poco del <span class="misspell">patron</span> de <span class="misspell">disenio</span> <span class="misspell">MVC</span>, no voy a entrar en detalles en este articulo.<br /><a id="zrao" title="El patron MVC" href="http://blog.pablo-morales.com/2008/09/2008/05/el-patron-mvc/" target="_blank">El <span class="misspell">patron</span> <span class="misspell">MVC</span></a> <br /><a id="raip" title="Zend Framework y el patron MVC" href="http://blog.pablo-morales.com/2008/09/2008/06/zend-framework-y-el-patron-mvc/" target="_blank">Zend Framework y el <span class="misspell">patron</span> <span class="misspell">MVC</span></a> </p>
<p>Nuestro modulo <span class="misspell">Index</span>, tiene que mostrar algo en el <span class="misspell">browser</span>, esto lo vamos a configurar desde nuestra vista, que en nuestro caso las vistas, las tenemos en la carpeta <span class="misspell">views</span>/<span class="misspell">scripts</span>/. Creamos una carpeta con el nombre del modulo, para guardar todos nuestros archivos <span class="misspell">ahi</span>. Nos <span class="misspell">quedaria</span> la siguiente carpeta <span class="misspell">views</span>/<span class="misspell">scripts</span>/<span class="misspell">index</span>/ dentro de la cual vamos a crear un archivo, con el mismo nombre de la <span class="misspell">accion</span>, <span class="misspell">index</span>.<span class="misspell">phtml</span>. La <span class="misspell">extension</span> <span class="misspell">phtml</span>, es la que usa como <span class="misspell">default</span> <span class="misspell">ZF</span>, para los archivos de la vista. </p>
<p>En nuestro <span class="misspell">index</span>.<span class="misspell">phtml</span>, vamos a generar un simple hola mundo. </p>
<p><em><span class="misspell">index</span>.<span class="misspell">phtml</span></em></p>
<div id="f9em" style="padding: 1em 0pt;text-align: left"><img style="width: 432px;height: 62px" src="http://docs.google.com/File?id=dcz4grwr_204hgkj8s7n_b" alt="" /></div>
<p>Si todo salio bien, y ejecutamos en nuestro <span class="misspell">browser</span> http://www.proyecto.com/ </p>
<p>Fuente: http://blog.pablo-morales.com/2008/09/empezando-con-zend-framework/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/empezando-con-zend-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Acelerando PHP: Zend Optimizer</title>
		<link>http://blog.finderit.com/php/2009/03/23/acelerando-php-zend-optimizer/</link>
		<comments>http://blog.finderit.com/php/2009/03/23/acelerando-php-zend-optimizer/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:27:00 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.finderit.com/php/?p=87</guid>
		<description><![CDATA[Siguiendo con la serie de artículos sobre la instalación de un servidor web sobre WindowsDNS dinámicas con No-IP, instalación de Apache e instalación de PHP y MySQL veremos en este número cómo instalar esta aplicación gratuita desarrollada por Zend, los principales desarrolladores del proyecto PHP, que permite disminuir el tiempo de ejecución de los scripts [...]]]></description>
			<content:encoded><![CDATA[<p>Siguiendo con la serie de artículos sobre la instalación de un servidor web sobre Windows<a title="DNS dinámicas con No-IP" href="http://mundogeek.net/archivos/2005/09/28/no-ip/">DNS dinámicas con No-IP</a>, <a title="Apache" href="http://mundogeek.net/archivos/2005/09/30/instalar-un-servidor-web-apache">instalación de Apache</a> e <a title="Instalación de PHP y MySQL" href="http://mundogeek.net/archivos/2005/10/15/instalar-php-y-mysql/">instalación de PHP y MySQL</a> veremos en este número cómo instalar esta aplicación gratuita desarrollada por Zend, los principales desarrolladores del proyecto PHP, que permite disminuir el tiempo de ejecución de los scripts entre un 20 y 50 por ciento.</p>
<p>Si en entregas anteriores no nos quedaba más remedio que ensuciarnos las manos editando archivos de texto para configurar los programas, en este caso tendremos a nuestra disposición un instalador que debería dejarnos muy poco por hacer.</p>
<p>Antes de nada, como siempre, es necesario descargar el software correspondiente desde su página web. Para llevar a cabo la <a title="Sección de descargas en la web de Zend Technologies" href="https://www.zend.com/store/free_download.php?pid=13">descarga de Zend Optimizer</a> tendremos que registrarnos antes en la web de Zend Technologies.</p>
<p>Durante la instalación se nos preguntará por el servidor web utilizado (Apache 2.x), la localización del archivo de configuración de PHP, php.ini (c:\php en nuestro ejemplo), el directorio en el que está instalado Apache (por defecto C:\Archivos de programa\Apache Group\Apache2) y el directorio en el que se almacenan las webs que servirá Apache (DocumentRoot, cuyo valor es, si no lo hemos cambiado, C:\Archivos de programa\Apache Group\Apache2\htdocs).</p>
<p><img src="http://img259.imageshack.us/img259/1015/instalacionzend9io.gif" alt="Programa de instalación de Zend Optimizer" /></p>
<p>Una vez terminado el proceso, si cargamos al archivo info.php que creamos para comprobar la instalación de PHP.</p>
<p>Fuente:http://mundogeek.net/archivos/2005/10/15/acelerando-php-zend-optimizer/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.finderit.com/php/2009/03/23/acelerando-php-zend-optimizer/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
