<?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>Michael Gomez &#187; php</title>
	<atom:link href="http://www.donubu.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.donubu.com</link>
	<description>Actualidad y Negocios</description>
	<lastBuildDate>Mon, 04 Apr 2011 21:33:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>De vuelta luego de muchas campañas más</title>
		<link>http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/</link>
		<comments>http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 17:00:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[paginas]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[amfphp]]></category>
		<category><![CDATA[angel star]]></category>
		<category><![CDATA[barrio la fuente]]></category>
		<category><![CDATA[campañas]]></category>
		<category><![CDATA[celulares]]></category>
		<category><![CDATA[cracks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[de culto]]></category>
		<category><![CDATA[digitales]]></category>
		<category><![CDATA[espacio]]></category>
		<category><![CDATA[falabella]]></category>
		<category><![CDATA[firme con la roja]]></category>
		<category><![CDATA[homecenter]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[nivea]]></category>
		<category><![CDATA[perfecto]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[piedra roja]]></category>
		<category><![CDATA[prime]]></category>
		<category><![CDATA[sodimac]]></category>
		<category><![CDATA[verdadera edad]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[youwow]]></category>
		<category><![CDATA[zapatillas]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=313</guid>
		<description><![CDATA[Ya es casi recurrente que luego de meses sin escribir en el Blog, aparezca con un monton de cosas para mostrar, entre ellas, las campañas más recientes en las cuales he participado (programando los backends, lo que tenga que ver con php + javascript ). Barrio la Fuente Sitio web bastante sencillo, con muy poca [...]]]></description>
			<content:encoded><![CDATA[<p>Ya es casi recurrente que luego de meses sin escribir en el Blog, aparezca con un monton de cosas para mostrar, entre ellas, las campañas más recientes en las cuales he participado (programando los backends, lo que tenga que ver con php + javascript <img src='http://www.donubu.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ).</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.barriolafuente.com/" target="_blank">Barrio la Fuente</a></strong></p>
<p><a href="http://www.barriolafuente.com/"><img class="size-medium wp-image-314" title="barriolafuente" src="http://www.donubu.com/wp-content/uploads/barriolafuente-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Sitio web bastante sencillo, con muy poca programación, pero con la integración de &#8220;Goals en analytics&#8221; y varios A/B Test que terminaron por transformar a la versión actual en la más exacta.</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.firmeconlaroja.cl/" target="_blank">Firme con la Roja</a></strong></p>
<p><a href="http://www.firmeconlaroja.cl"><img class="size-medium wp-image-315" title="firmeconlaroja" src="http://www.donubu.com/wp-content/uploads/firmeconlaroja-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Blog en WordPress con la campaña de Sodimac para llevar a 1.000.000 de Chilenos a Sudáfrica (Las fotos de cada uno en un lienzo gigante). Constaba de una aplicacion desarrollada en Flash para poder <a href="http://www.firmeconlaroja.cl/tu-grito" target="_blank">grabar los gritos de la hinchada</a> (en conjunto con una solución de <a href="http://www.mediastream.cl" target="_blank">Streaming</a>), una especie de <a href="http://www.firmeconlaroja.cl/el-lienzo" target="_blank">banner dinámico</a> donde se podían visualizar las fotos de las personas. Este <a href="http://www.firmeconlaroja.cl/el-lienzo" target="_blank">lienzo </a>iba creciendo a medida que llegaban las fotos al sistema, totalizando más de 1.000.000</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.niveaangelstar.cl" target="_blank">Nivea Angel Star Youwow</a></strong></p>
<p><a href="http://www.niveaangelstar.cl"><img class="alignnone size-medium wp-image-316" title="youwow" src="http://www.donubu.com/wp-content/uploads/youwow-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Una completa aplicación donde los usuarios podían subir su foto y la de sus amigos, para utilizarlas como personajes principales de 3 distintas películas (utilizando el tracking de puntos), donde la protagonista intentaba safar de &#8220;Un Jote, Un Perro faldero y una peculiar Flor&#8221;. Bastante interacción de Flash con servicios PHP basados en AMFPHP. URLs únicas y amigables para compartir con las demás personas a través de Twitter o Facebook.</p>
<p>También fue necesaria la utilización de un <a href="http://www.mediastream.cl" target="_blank">servidor de Streaming</a> para el almacenamiento de los videos.</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.tuverdaderaedad.cl" target="_blank">Tu Verdadera Edad</a></strong></p>
<p><a href="http://www.tuverdaderaedad.cl"><img class="alignnone size-medium wp-image-317" title="tuverdaderaedad" src="http://www.donubu.com/wp-content/uploads/tuverdaderaedad-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Otra aplicación más, donde la idea básica era que los usuarios podía subir una imagen, que posteriormente era evaluada por cualquier persona que entrase al sitio, que otorgaba una edad acorde a lo que la persona representaba. La gracia era que uno podía ingresar a su propio panel y saber que opinaban los otros de uno.</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.expoespaciovivo.cl/" target="_blank">Espacio Vivo</a></strong></p>
<p><a href="http://www.expoespaciovivo.cl/"><img class="alignnone size-medium wp-image-318" title="espaciovivo" src="http://www.donubu.com/wp-content/uploads/espaciovivo-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Minisitio de Homecenter Sodimac. Desarrollado en Flash (solo tuve que hacer la galería <img src='http://www.donubu.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  en AS3, lo demás lo potencio Theguaz)</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.zapatillasdeculto.cl/" target="_blank">Zapatillas de Culto</a></strong></p>
<p><a href="http://www.zapatillasdeculto.cl/"><img class="alignnone size-medium wp-image-319" title="zapatillas" src="http://www.donubu.com/wp-content/uploads/zapatillas-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Sitio web montado sobre WordPress. Con un montón de características desarrolladas desde 0, o en base a Plugins. <a href="http://www.zapatillasdeculto.cl/galeria" target="_blank">Una moderna galería </a>programada con JQuery y JSON. Planteaba ciertos desafíos de compatibilidad entre browsers.</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.primedigital.cl/" target="_blank">Prime Digital</a></strong></p>
<p><a href="http://www.primedigital.cl/"><img class="alignnone size-medium wp-image-320" title="prime" src="http://www.donubu.com/wp-content/uploads/prime-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Este es uno de esos proyectos que a uno le gusta mostrar  y destacar en el Portafolio. Es de aquellos que integra la mayor experticie en lo que uno desarrolla a diario. Integrando HTML + AS3 + CSS + PHP + JAVASCRIPT + Todo lo demás <img src='http://www.donubu.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Al igual que las versiones anteriores, posee un sistema inteligente de filtros, que van apareciendo a medida que uno avanza en la búsqueda del Teléfono Celular adecuado. Sistema de comentarios y iLike de Facebook. Reviews de las marcas, ZOOM de las imagenes, entre muchas otras cosas. Y lo mejor de todo es que esta con Ajax y no requiere actualizar ni esperar esas infinitas cargas.</p>
<div class="limpiar"></div>
<p><strong><a href="http://www.loscracks.cl/" target="_blank">Los Cracks</a></strong></p>
<p><a href="http://www.loscracks.cl/"><img class="alignnone size-medium wp-image-321" title="loscracks" src="http://www.donubu.com/wp-content/uploads/loscracks-300x123.jpg" alt="" width="300" height="123" /></a></p>
<p>Una aplicación para el mundial (Falabella), donde tu podías elegir a 5 Cracks (jugadores de alto nivel, como Messi, CR9, KAKA) y tener más oportunidades mientras estos hacían goles durante el mundial. A eso, se le podía sumar también, las invitaciones a tus amigos y el ingreso de boletas en Falabella.com</p>
<div class="limpiar"></div>
<p>&#8212;&#8212;&#8212;</p>
<p>La mayoría de estos proyectos integran mejoras que se van adquiriendo gracias a la experiencia en campañas pasadas. Cosas que me falta por agregar, son los History Browsing, para poder controlar los botones Atrás &#8211; Adelante en los navegadores (he visto muchos plugins, pero aún no encuentro el que necesito realmente, quizás hacerlo no sea una mala idea).</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/" title="Oportunidad Digital &#8220;Fotografía&#8221;">Oportunidad Digital &#8220;Fotografía&#8221;</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li><li><a href="http://www.donubu.com/2009/04/02/sonarfm-sitio-web-de-la-radio-20/" title="SonarFM &#8211; Sitio web de la Radio 2.0">SonarFM &#8211; Sitio web de la Radio 2.0</a></li><li><a href="http://www.donubu.com/2009/12/29/ya-llego-el-crush-power-music-2010/" title="Ya llego el Crush Power Music 2010">Ya llego el Crush Power Music 2010</a></li><li><a href="http://www.donubu.com/2009/03/11/jquery-lectura-y-procesamiento-de-archivos-json/" title="JQuery &#8211; Lectura y Procesamiento de Archivos JSON">JQuery &#8211; Lectura y Procesamiento de Archivos JSON</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nivea Silvermoto</title>
		<link>http://www.donubu.com/2010/02/26/nivea-silvermoto/</link>
		<comments>http://www.donubu.com/2010/02/26/nivea-silvermoto/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 15:09:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[juegos]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[amfphp]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[iones]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[moto]]></category>
		<category><![CDATA[nivea]]></category>
		<category><![CDATA[participa]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[silver]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=307</guid>
		<description><![CDATA[Nueva campaña para Nivea SilverMoto. Participa en el juego de los IONES y ganate uno de los pack o afeitadoras diarias. Si durante el juego invitas a uno de tus amigos, podrás obtener de forma automática 5 oportunidades más seguir jugando. Desarrollado con actionscript 3 + Flash + AMFPHP para el backend de la aplicación. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.silvermoto.cl" target="_blank"><img class="aligncenter size-medium wp-image-308" title="silvermoto" src="http://www.donubu.com/wp-content/uploads/silvermoto-300x105.jpg" alt="" width="300" height="105" /></a></p>
<p>Nueva campaña para <a href="http://www.silvermoto.cl/" target="_blank">Nivea SilverMoto</a>. Participa en el juego de los IONES y ganate uno de los pack o afeitadoras diarias. Si durante el juego invitas a uno de tus amigos, podrás obtener de forma automática 5 oportunidades más seguir jugando.<br />
Desarrollado con actionscript 3 + Flash + AMFPHP para el backend de la aplicación.</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2009/12/29/ya-llego-el-crush-power-music-2010/" title="Ya llego el Crush Power Music 2010">Ya llego el Crush Power Music 2010</a></li><li><a href="http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/" title="Oportunidad Digital &#8220;Fotografía&#8221;">Oportunidad Digital &#8220;Fotografía&#8221;</a></li><li><a href="http://www.donubu.com/2009/11/13/eucerin-solar-httpwww-eucerinsolar-com/" title="Eucerin Solar http://www.eucerinsolar.com">Eucerin Solar http://www.eucerinsolar.com</a></li><li><a href="http://www.donubu.com/2009/11/10/eucerin-kids-httpwww-eucerinkids-com/" title="Eucerin Kids http://www.eucerinkids.com">Eucerin Kids http://www.eucerinkids.com</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2010/02/26/nivea-silvermoto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oportunidad Digital &#8220;Fotografía&#8221;</title>
		<link>http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/</link>
		<comments>http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 13:24:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[falabella]]></category>
		<category><![CDATA[fotografia]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[oportunidad]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=286</guid>
		<description><![CDATA[Hace algunos días se entrego el nuevo sitio para Oportunidad Digital &#8220;Fotografía&#8221;. Desarrollado en HTML + CSS y harto Javascript de la mano de jQuery. Se aplico un sistema de &#8220;filtros inteligentes&#8221;, que van apareciendo de acuerdo a los resultados que van quedando y agrupandose de acuerdo al mismo parámetro y luego son entregados a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oportunidaddigital.cl" target="_blank"><img class="aligncenter size-medium wp-image-287" title="oportunidaddigital" src="http://www.donubu.com/wp-content/uploads/op-300x196.jpg" alt="" width="300" height="196" /></a><br />
Hace algunos días se entrego el nuevo sitio para <a href="http://www.oportunidaddigital.cl">Oportunidad Digital &#8220;Fotografía&#8221;</a>. Desarrollado en HTML + CSS y harto Javascript de la mano de jQuery. Se aplico un sistema de &#8220;filtros inteligentes&#8221;, que van apareciendo de acuerdo a los resultados que van quedando y agrupandose de acuerdo al mismo parámetro y luego son entregados a la aplicación Flash que controla la aplicación paso a paso.</p>
<p>El slider de productos se forma a través de una respuesta JSON, que se genera en cada clic sobre los botones de avanzar y retroceder, y una vez que cargan, se desliza una mascara para dar el efecto de slide.</p>
<p>También se reprogramo un sistema de ventanas modales &#8220;<a href="http://fancybox.net/" target="_blank">Fancybox</a>&#8221; para poder implementar 2 hojas de estilo en la misma ventana modal (para las imagenes del fondo y bordes).</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2009/12/29/ya-llego-el-crush-power-music-2010/" title="Ya llego el Crush Power Music 2010">Ya llego el Crush Power Music 2010</a></li><li><a href="http://www.donubu.com/2009/07/10/vibora-2-0-con-twitter-connect/" title="Vibora 2.0 con Twitter Connect">Vibora 2.0 con Twitter Connect</a></li><li><a href="http://www.donubu.com/2009/03/11/jquery-lectura-y-procesamiento-de-archivos-json/" title="JQuery &#8211; Lectura y Procesamiento de Archivos JSON">JQuery &#8211; Lectura y Procesamiento de Archivos JSON</a></li><li><a href="http://www.donubu.com/2008/04/13/htmlsql-un-parser-sql-para-archivos-html/" title="htmlSQL &#8211; Un parser SQL para archivos HTML">htmlSQL &#8211; Un parser SQL para archivos HTML</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eucerin Solar http://www.eucerinsolar.com</title>
		<link>http://www.donubu.com/2009/11/13/eucerin-solar-httpwww-eucerinsolar-com/</link>
		<comments>http://www.donubu.com/2009/11/13/eucerin-solar-httpwww-eucerinsolar-com/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 15:45:25 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[eucerin]]></category>
		<category><![CDATA[experto]]></category>
		<category><![CDATA[kids]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[solar]]></category>
		<category><![CDATA[ssi]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=275</guid>
		<description><![CDATA[Al igual que con Eucerin kids, Eucerin Solar es el nuevo proyecto que sale al aire. Uno de los principales desafíos era determinar la forma en la cual cargar elementos compartidos sin utilizar PHP (por que realmente era innecesario). Aplicando técnicas aprendidas, determinamos que usar SSI (Server Side Includes) (El próximo post será sobre esto) [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.eucerinsolar.com" target="_blank"><img class="aligncenter size-full wp-image-276" title="logo_05" src="http://www.donubu.com/wp-content/uploads/logo_05.png" alt="logo_05" width="130" height="58" /></a></p>
<p>Al igual que con <a href="http://www.eucerinkids.com" target="_blank">Eucerin kids</a>, <a href="http://www.eucerinsolar.com" target="_blank">Eucerin Solar</a> es el nuevo proyecto que sale al aire. Uno de los principales desafíos era determinar la forma en la cual cargar elementos compartidos sin utilizar PHP (por que realmente era innecesario).</p>
<p>Aplicando técnicas aprendidas, determinamos que usar <a href="http://httpd.apache.org/docs/1.3/howto/ssi.html" target="_blank">SSI (Server Side Includes)</a> (El próximo post será sobre esto) sería lo más óptimo. Además en una de las secciones principales se agregó un <a href="http://www.eucerinsolar.com/experto" target="_blank">Blog desarrollado sobre WordPress</a> con un theme propio. Contiene también su <a href="http://www.eucerinsolar.com/dermacenter.html" target="_blank">Google Map para localizar tiendas DERMACENTER cercanas</a> y un <a href="http://www.eucerinsolar.com/concurso.html" target="_blank">concurso para ganar productos Eucerin solar para un mes</a>.</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2009/11/10/eucerin-kids-httpwww-eucerinkids-com/" title="Eucerin Kids http://www.eucerinkids.com">Eucerin Kids http://www.eucerinkids.com</a></li><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li><li><a href="http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/" title="Oportunidad Digital &#8220;Fotografía&#8221;">Oportunidad Digital &#8220;Fotografía&#8221;</a></li><li><a href="http://www.donubu.com/2009/10/28/validar-emails-con-php-de-forma-segura-y-eficiente/" title="Validar Emails con PHP de forma segura y eficiente">Validar Emails con PHP de forma segura y eficiente</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2009/11/13/eucerin-solar-httpwww-eucerinsolar-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validar Emails con PHP de forma segura y eficiente</title>
		<link>http://www.donubu.com/2009/10/28/validar-emails-con-php-de-forma-segura-y-eficiente/</link>
		<comments>http://www.donubu.com/2009/10/28/validar-emails-con-php-de-forma-segura-y-eficiente/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 14:43:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[check]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[mx]]></category>
		<category><![CDATA[validar]]></category>
		<category><![CDATA[validate]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=261</guid>
		<description><![CDATA[He buscado y buscado desde que comence a programar en PHP, la mejor manera de comprobar si un email es válido o no, y si esta bien escrito y además que sea de un dominio válido con sus DNS y registros MX correctos. En fin, sonaba imposible, pero navegando y googleando, encontré la solución: function [...]]]></description>
			<content:encoded><![CDATA[<p>He buscado y buscado desde que comence a programar en PHP, la mejor manera de comprobar si un email es válido o no, y si esta bien escrito y además que sea de un dominio válido con sus DNS y registros MX correctos. En fin, sonaba imposible, pero navegando y googleando, encontré la solución:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> validateMail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		   <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		   <span style="color: #000088;">$atIndex</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strrpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">is_bool</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$atIndex</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$atIndex</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		      <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		   <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
		      <span style="color: #000088;">$domain</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #339933;">,</span> <span style="color: #000088;">$atIndex</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		      <span style="color: #000088;">$local</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$atIndex</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		      <span style="color: #000088;">$localLen</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$local</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		      <span style="color: #000088;">$domainLen</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$domain</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$localLen</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$localLen</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">64</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		         <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$domainLen</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$domainLen</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		         <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$local</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$local</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$localLen</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		         <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/\\.\\./'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$local</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		         <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^[A-Za-z0-9\\-\\.]+$/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$domain</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		         <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/\\.\\./'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$domain</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		         <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^(\\\\.|[A-Za-z0-9!#%&amp;`_=\\/$\'*+?^{}|~.-])+$/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\\</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$local</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		         <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^&quot;(\\\\&quot;|[^&quot;])+&quot;$/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\\</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$local</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		            <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		         <span style="color: #009900;">&#125;</span>
		      <span style="color: #009900;">&#125;</span>
		      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$isValid</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">checkdnsrr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$domain</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'MX'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">checkdnsrr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$domain</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'A'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		         <span style="color: #000088;">$isValid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		      <span style="color: #009900;">&#125;</span>
		   <span style="color: #009900;">&#125;</span>
&nbsp;
		   <span style="color: #b1b100;">return</span> <span style="color: #000088;">$isValid</span><span style="color: #339933;">;</span>						
		<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">// Para implementarlo</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>validateMail<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'algun@email.com'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'email valido'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'email no valido'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Aplica cosas básicas como comprobar la existencia del @, además de RFC para el largo máximo permitido por el estándar y expresiones regulares para validar los simbolos. Y por si fuese poco, chequea que el dominio exista (A) y que sus MX sean válidos.</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li><li><a href="http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/" title="Oportunidad Digital &#8220;Fotografía&#8221;">Oportunidad Digital &#8220;Fotografía&#8221;</a></li><li><a href="http://www.donubu.com/2009/11/13/eucerin-solar-httpwww-eucerinsolar-com/" title="Eucerin Solar http://www.eucerinsolar.com">Eucerin Solar http://www.eucerinsolar.com</a></li><li><a href="http://www.donubu.com/2009/10/28/tips-cakephp/" title="Tips cakePHP">Tips cakePHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2009/10/28/validar-emails-con-php-de-forma-segura-y-eficiente/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tips cakePHP</title>
		<link>http://www.donubu.com/2009/10/28/tips-cakephp/</link>
		<comments>http://www.donubu.com/2009/10/28/tips-cakephp/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 13:31:57 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[ayuda]]></category>
		<category><![CDATA[controlador]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[modelo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[views]]></category>
		<category><![CDATA[vistas]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=256</guid>
		<description><![CDATA[Quiero recopilar todos los tips (que me acuerdo) de cakePHP, aquellos que nos ayudan a realizar tareas cotidianas y evitar tener que recurrir constantemente a google para poder encontrarlo. Desde un controlador: Cambiar el layout $this-&#62;layout = 'nombre_del_layout'; Cambiar la cantidad de resultados del paginador var $paginate = array&#40;'limit'=&#62; 1000&#41;;  // Definirlo como atributo del [...]]]></description>
			<content:encoded><![CDATA[<p>Quiero recopilar todos los tips (que me acuerdo) de cakePHP, aquellos que nos ayudan a realizar tareas cotidianas y evitar tener que recurrir constantemente a google para poder encontrarlo.</p>
<p><strong>Desde un controlador:</strong></p>
<p><em><strong>Cambiar el layout</strong></em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'nombre_del_layout'</span><span style="color: #339933;">;</span></pre></div></div>

<p><em><strong>Cambiar la cantidad de resultados del paginador</strong></em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$paginate</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'limit'</span><span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// Definirlo como atributo del controlador y no dentro de un metodo.</span></pre></div></div>

<p><em><strong>Obtener uno o todos los parametros que vienen por la URL</strong></em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nombre-del-parametro'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
pr<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//La funcion pr es similar a print_r aunque con mas estilo, además, está disponible en cualquier archivo que dependa de cakePHP.</span></pre></div></div>

<p><em><strong>Activar el conector con la base de datos</strong></em></p>
<p><em>Esta práctica atenta contra el modelo MVC, por lo cual, si lo usas debe ser en casos muy aislados.</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">uses<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'model/connection_manager'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Agregarlo antes de la definicion de Class...</span>
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span> ConnectionManager<span style="color: #339933;">::</span><span style="color: #004000;">getDataSource</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// dentro de un modelo del controlador</span>
<span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Select * from X'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><em><strong>Redireccion a X lugar</strong></em></p>
<p><em>Para mantener el controlador y solo redireccionar el metodo:</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><em>Para cambiar el controlador y el metodo</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'users'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'action'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><em>Al utilizar el array como parametro, se aplica la Inversa del ROUTES, por ende, si defines que el users/index sea usuarios.html, entonces, la redireccion va a ser contra usuarios.html.</em></p>
<p>En fin, voy a extender y actualizar este post mientras vaya recopilando mas TIPS.<em><br />
</em></p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2007/12/29/cakephp-introduccion/" title="CakePHP: un buen pastel de chocolate">CakePHP: un buen pastel de chocolate</a></li><li><a href="http://www.donubu.com/2009/01/30/programacion-en-php-migrar-de-entornos-de-desarrollo-a-productivos/" title="Programacion en PHP, migrar de entornos de desarrollo a productivos">Programacion en PHP, migrar de entornos de desarrollo a productivos</a></li><li><a href="http://www.donubu.com/2009/01/07/instalar-cakephp-desde-0-y-configurar-la-consola-en-windows/" title="Instalar Cakephp desde 0 y configurar la consola en windows">Instalar Cakephp desde 0 y configurar la consola en windows</a></li><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2009/10/28/tips-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programacion en PHP, migrar de entornos de desarrollo a productivos</title>
		<link>http://www.donubu.com/2009/01/30/programacion-en-php-migrar-de-entornos-de-desarrollo-a-productivos/</link>
		<comments>http://www.donubu.com/2009/01/30/programacion-en-php-migrar-de-entornos-de-desarrollo-a-productivos/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 15:08:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[conflictos]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[entornos]]></category>
		<category><![CDATA[extensiones]]></category>
		<category><![CDATA[funciones]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[librerias]]></category>
		<category><![CDATA[migrar]]></category>
		<category><![CDATA[productivo]]></category>
		<category><![CDATA[so]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=208</guid>
		<description><![CDATA[Uno de los principales problemas de la programación de aplicaciones en PHP, es el tema de migrar de un entorno de desarrollo, a un entorno final o productivo. Esto ocurre, ya que en el pc donde estamos programando, normalmente disponemos de todos los permisos necesarios para instalar extensiones que vamos utilizando, sin embargo, en un [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-medium wp-image-212" title="2280277753_e1d7f852ba" src="http://www.donubu.com/wp-content/uploads/2280277753_e1d7f852ba-225x300.jpg" alt="2280277753_e1d7f852ba" width="225" height="300" /></p>
<div class="limpiar"></div>
<p>Uno de los principales problemas de la programación de aplicaciones en PHP, es el tema de migrar de un entorno de desarrollo, a un entorno final o productivo. Esto ocurre, ya que en el pc donde estamos programando, normalmente disponemos  de todos los permisos necesarios para instalar extensiones que vamos utilizando, sin embargo, en un servidor, la mayoría  de las veces no tenemos acceso a nada, incluyendo el php.ini, ya sea por que es un host gratuito, pagado, pero no un servidor dedicado.</p>
<p>De las extensiones o funciones  más usadas y a su vez la que mayormente nos causan problemas a la hora de migrar:<span id="more-208"></span></p>
<p><a href="http://cl2.php.net/manual/es/book.image.php" target="_blank"><strong>GD2</strong></a></p>
<p>Esta librería se utiliza para el tratamiento de imagenes. Ya sea al vuelo, o generar imagenes estaticas. Mayormente la aplicamos en generación de thumbnails, captcha para evitar spam en formularios, entre otras cosas. A veces, por un tema de rendimiento en servidores gratuitos o host de bajo precio, viene deshabilitada por defecto. A su vez, puede ocurrir que este habilitada, pero sin soporte para la librería lib-jpg, lo que nos causaría el problema de no poder utilizar el formato JPG.</p>
<p><a href="http://cl.php.net/mcrypt" target="_blank"><strong>MCRYPT</strong></a></p>
<p>Aplicada en el proceso de cifrar información (NO ENCRIPTAR, que es un mal uso de la palabra, ya que la traducción de encrypt, es CIFRAR). No esta habilitada por defecto.</p>
<p><a href="http://cl.php.net/simplexml" target="_blank"><strong>SIMPLEXML</strong></a></p>
<p>Esta librería solo esta disponible en php5, por ende todos los host con php4 no podrán ejecutarla. Viene por defecto, pero simplemente para php5. Se utiliza para la lectura y creación de archivos XML.</p>
<p><a href="http://cl.php.net/json" target="_blank"><strong>JSON</strong></a></p>
<p>Al igual que SimpleXML, solo esta disponible para php5, y más aún, php5.2, aunque viene dentro de php y no es una extension separada.</p>
<p><a href="http://www.php.net/ini.core" target="_blank"><strong>SHORT TAGS</strong></a></p>
<p>Es común ver códigos escritos en php que utilizan los shorttags o etiquetas cortas:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?=</span><span style="color: #0000ff;">'Hola'</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Que al no estar habilitadas, no serán interpretadas por php y por ende, en nuestros archivos, al verlos por el navegador aparecerá parte del código, y esto podría suponer un problema de seguridad, ya que cualquier visitante podría leerlo y a su vez buscarnos bugs o debilidades.</p>
<p><strong>PERMISOS DE ESCRITURA</strong></p>
<p>Siempre que utilicemos funciones como <strong>fwrite</strong>, <strong>fopen</strong>, <strong>file_put_contents</strong> es necesario comprobar, que los ficheros dispongan de los permisos necesarios, y más aún si es IIS o bien apache (sobre linux). Al igual que los permisos de escritura, existe el <a href="http://cl2.php.net/safe_mode" target="_blank">SAFE_MODE</a>, que es un parámetro de configuración que le indica a php que los scripts estarán <a href="http://cl2.php.net/manual/es/features.safe-mode.functions.php" target="_blank">limitados en el uso de algunas funciones especificas</a>.</p>
<p><strong>ID3</strong></p>
<p>Es de uso un tanto específico para obtener información id3 de ficheros MP3. Como alternativa existen <a href="http://www.phpclasses.org/browse/package/1440.html" target="_blank">clases de lectura de mp3</a>, así no dependerás de la extensión.</p>
<p>Por este motivo, es de vital importancia, que cada vez que utilices estas funciones, debas comprobar que no existen conflictos en tu servidor productivo, ya que si lo haces de forma posterior al desarrollo no tendrás la posibilidad de volver atrás.</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2009/01/07/instalar-cakephp-desde-0-y-configurar-la-consola-en-windows/" title="Instalar Cakephp desde 0 y configurar la consola en windows">Instalar Cakephp desde 0 y configurar la consola en windows</a></li><li><a href="http://www.donubu.com/2009/10/28/tips-cakephp/" title="Tips cakePHP">Tips cakePHP</a></li><li><a href="http://www.donubu.com/2008/05/11/virtualizacion-y-microsoft-virtual-pc/" title="Virtualización y Microsoft Virtual PC">Virtualización y Microsoft Virtual PC</a></li><li><a href="http://www.donubu.com/2008/01/14/linux-fan-boys-destruyen-linux/" title="¿Linux Fan Boys destruyen Linux?">¿Linux Fan Boys destruyen Linux?</a></li><li><a href="http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/" title="Paneles de Administración de Servidores">Paneles de Administración de Servidores</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2009/01/30/programacion-en-php-migrar-de-entornos-de-desarrollo-a-productivos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar Cakephp desde 0 y configurar la consola en windows</title>
		<link>http://www.donubu.com/2009/01/07/instalar-cakephp-desde-0-y-configurar-la-consola-en-windows/</link>
		<comments>http://www.donubu.com/2009/01/07/instalar-cakephp-desde-0-y-configurar-la-consola-en-windows/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 19:11:13 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[bake]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[configurar]]></category>
		<category><![CDATA[consola]]></category>
		<category><![CDATA[entorno]]></category>
		<category><![CDATA[instalar]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[variables]]></category>
		<category><![CDATA[wamp]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=187</guid>
		<description><![CDATA[Uno de los principales problemas, al iniciarse en el mundo de cakePHP es lograr levantar el sitio en un entorno productivo (incluso en el de desarrollo) y a su vez poder utilizar la consola incluida. Las principales ventajas de la consola de cakePHP, es que puedes generar desde el archivo de conexion a la base [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-192 margenes" title="cake-logo" src="http://www.donubu.com/wp-content/uploads/cake-logo.png" alt="cake-logo" width="180" height="180" />Uno de los principales problemas, al iniciarse en el mundo de cakePHP es lograr levantar el sitio en un entorno productivo (incluso en el de desarrollo) y a su vez poder utilizar la consola incluida.</p>
<p>Las principales ventajas de la consola de cakePHP, es que puedes generar desde el archivo de conexion a la base de datos, incluyendo creación de modelos, controladores y vistas, y una herramienta de extracción i18n para lograr internacionalizar nuestras aplicaciones.</p>
<p>Para comenzar, asumo desde un inicio, que tienes Windows xp o superior, Apache 2.x (Con el modulo mod_rewrite habilitado), PHP 5.X y MySQL 5.x, funcionando sin inconvenientes.<span id="more-187"></span></p>
<p>Ahora, <a href="http://cakeforge.org/frs/?group_id=23&amp;release_id=433" target="_blank">entrar a la página oficial y descargarse la version 1.2</a> (en estos momentos ya existe la versión final). Posteriormente extraerlo en la raiz de la carpeta del sitio. (Si tenemos el www_root en c:\wamp\www, extraer directamente las carpetas ahí). Quedando en una estructura:</p>
<p>- c:\wamp\www<br />
- app /<br />
-  cake /<br />
&#8230;.. etc</p>
<p>Para probar que todo va bien, ejecutamos la página web en nuestro navegador. (http://localhost/) y debiesemos ver el mensaje de instalacion de cake por defecto:</p>
<p><a href="http://www.donubu.com/wp-content/uploads/home.jpg"><img class="alignleft size-medium wp-image-188" title="home" src="http://www.donubu.com/wp-content/uploads/home-300x168.jpg" alt="home" width="300" height="168" /></a></p>
<p>Al ver esta pantalla, podemos estar casi seguros de que lo hemos hecho bien.</p>
<p>Ahora la parte interesante&#8230;</p>
<p><strong>&#8220;Configurar la Consola de cakePHP en Windows&#8221;</strong></p>
<p>Nos vamos al icono de MIPC y hacemos clic con el boton derecho del mouse y entramos a propiedades. Luego, opciones avanzadas y finalmente en variables de entorno. En variables de sistema, ubicamos una llamada <strong>Path</strong>, le damos clic en modificar. NO DEBEMOS BORRAR NADA, solo al final del texto &#8220;valor de la variable&#8221; agregamos:</p>
<p>- El path donde se encuentra el php.exe (en mi caso, y del ejemplo, lo tengo en <em>&#8220;C:\wamp\bin\php\php5.2.6&#8243;</em>) y al final poner un &#8220;;&#8221; (punto y coma sin paréntesis). A continuación de ese &#8220;;&#8221; , debemos agregar el path hacia la consola de cake (<em> &#8220;C:\wamp\www\cake\console&#8221; </em>) . Finalmente, clic en aceptar, aceptar, aceptar.</p>
<p><strong>OJO!, dentro de la variable path, cada uno de los directorios ahí ingresados estan separados por un &#8220;;&#8221; y si no es así debes corregirlo. </strong>Ahora, vamos a probar la consola.</p>
<p>Clic en inicio =&gt; ejecutar y escribimos CMD y luego aceptar.</p>
<p>Debemos llegar al lugar donde tenemos nuestra app de cake.</p>
<p><img class="aligncenter size-full wp-image-189" title="cmd" src="http://www.donubu.com/wp-content/uploads/cmd.jpg" alt="cmd" width="526" height="167" /></p>
<p>Y ya, desde la consola podemos empezar a cocinar con BAKE.</p>
<p><img class="aligncenter size-full wp-image-190" title="bake" src="http://www.donubu.com/wp-content/uploads/bake.jpg" alt="bake" width="628" height="260" /></p>
<p>Para el siguiente post, les estoy preparando un tutorial de como comenzar a trabajar con la consola <img src='http://www.donubu.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2009/01/30/programacion-en-php-migrar-de-entornos-de-desarrollo-a-productivos/" title="Programacion en PHP, migrar de entornos de desarrollo a productivos">Programacion en PHP, migrar de entornos de desarrollo a productivos</a></li><li><a href="http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/" title="Paneles de Administración de Servidores">Paneles de Administración de Servidores</a></li><li><a href="http://www.donubu.com/2009/10/28/tips-cakephp/" title="Tips cakePHP">Tips cakePHP</a></li><li><a href="http://www.donubu.com/2008/04/06/windows-a-simple-vista-p/" title="Windows a simple Vista :P">Windows a simple Vista :P</a></li><li><a href="http://www.donubu.com/2008/01/14/linux-fan-boys-destruyen-linux/" title="¿Linux Fan Boys destruyen Linux?">¿Linux Fan Boys destruyen Linux?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2009/01/07/instalar-cakephp-desde-0-y-configurar-la-consola-en-windows/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Tutorial 3: Limitar Descargas con PHP y MySQL &#8211; descargas simultaneas y velocidad de bajada</title>
		<link>http://www.donubu.com/2008/05/16/tutorial-3-limitar-descargas-con-php-y-mysql-descargas-simultaneas-y-velocidad-de-bajada/</link>
		<comments>http://www.donubu.com/2008/05/16/tutorial-3-limitar-descargas-con-php-y-mysql-descargas-simultaneas-y-velocidad-de-bajada/#comments</comments>
		<pubDate>Fri, 16 May 2008 18:27:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[descargas]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[ancho de banda]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[limitar]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=87</guid>
		<description><![CDATA[Actualmente este singular problema puede ser resuelto por diversos módulos integrados en Apache (no de forma nativa pero si disponibles para su descarga), como MOD_LIMITIPCONN o MOD_BANDWIDTH. Sin embargo no en todos los servidores gratuitos o pagados está instalado. Primero; ¿Por qué limitar las descargas?: Usualmente, uno acostumbra a bajar todos los links disponibles en [...]]]></description>
			<content:encoded><![CDATA[<p>Actualmente este singular problema puede ser resuelto por diversos módulos integrados en <a href="http://www.apache.org/" target="_blank">Apache</a> (no de forma nativa pero si disponibles para su descarga), como <a href="http://dominia.org/djao/limitipconn.html" target="_blank">MOD_LIMITIPCONN</a> o <a href="http://www.cohprog.com/mod_bandwidth.html" target="_blank">MOD_BANDWIDTH</a>. Sin embargo no en todos los servidores gratuitos o pagados está  instalado.</p>
<p>Primero; <strong>¿Por qué limitar las descargas?</strong>: Usualmente, uno acostumbra a bajar todos los links disponibles en una web y no uno por uno. Esto no afecta mayormente al cliente, pero sí al servidor, ya que consume el ancho de banda disponible. Y más aún al utilizar un gestor de descargas, que es capaz de conectarse a un mismo servidor N veces para bajar un mismo archivo, si dispones de 100 conexiones simultaneas disponibles, entonces el gestor facilmente podría utilizar esas 100 y dejar a todos los demás esperando.</p>
<p>Lo primero y único que necesitas: <a href="http://www.wampserver.com/en/index.php" target="_blank">Apache (con mod_rewrite instalado) y  mySQL (para almacenar las conexiones de cada IP)</a>.</p>
<p><strong>El script consiste en</strong>, capturar todos los archivos terminados en &#8220;ZIP&#8221; o &#8220;RAR&#8221; o &#8220;ISO&#8221; (se pueden agregar todos los que quieras) y pasarlos por un archivo que va a decidir si acepta  o no la descarga. No solo podemos limitar el número de descargas simultáneas, sino que también los KBS de velocidad. Lamentablemente, esta acción al aplicarse en archivos grandes, dejará al interprete de PHP ejecutandose durante todo el proceso, lo que consumirá recursos del procesador y RAM, por ende, NO USAR CON ARCHIVOS EXCESIVAMENTE GRANDES.</p>
<p>Se puede definir el máx. de descargas simultáneas y el tiempo de espera (en minutos) para volver a bajar archivos.<span id="more-87"></span></p>
<h3><strong>USAR esta documentación a modo de aprendizaje y aplicación de php en diversas tareas que se deben de realizar a diario y no como un complemento en sitios web con demasiado tráfico.</strong></h3>
<p><strong>Primero</strong><br />
Deben crear una tabla en MySQL con el código:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span>  <span style="color: #993333; font-weight: bold;">TABLE</span>  <span style="color: #ff0000;">`limitar`</span><span style="color: #66cc66;">.</span><span style="color: #ff0000;">`descargas`</span> <span style="color: #66cc66;">&#40;</span>
<span style="color: #ff0000;">`id`</span> <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #66cc66;">,</span>
 <span style="color: #ff0000;">`ip`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">15</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
 <span style="color: #ff0000;">`archivo`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">255</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
 <span style="color: #ff0000;">`tiempo_descarga`</span> <span style="color: #993333; font-weight: bold;">TIMESTAMP</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
 <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">`id`</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> ENGINE <span style="color: #66cc66;">=</span> MYISAM</pre></div></div>

<div>Además necesitas el código a utilizar en un archivo &#8220;.htaccess&#8221; que controlará que todas las URL que terminen en &#8220;zip&#8221;, &#8220;rar&#8221; o &#8220;iso&#8221; (puedes agregar otros, separandolos por el simbolo | ), sean pasadas por el archivo php que gestionará los accesos:</div>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">on</span>  <span style="color: #00007f;">RewriteRule</span> ^(.*)\.(zip|rar|iso)$ limitar.php?archivo=$1.$2 [QSA]</pre></div></div>

<p>y finalmente el código php necesario para esta labor (todas sus líneas comentadas):</p>
<p>Lamentablemente el parser de geshi, me transforma los simbolos &lt; &gt; en &amp; lt; y &amp; gt; respectivamente. Deben reemplazarlos para que funcione o bien descargar el rar.</p>
<p><a href="http://www.donubu.com/uploads/limitar.rar" target="_self"><strong>Descargar el archivo limitar.php</strong></a></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>?php
&nbsp;
	<span style="color: #666666; font-style: italic;">//-------------------------------------</span>
	<span style="color: #666666; font-style: italic;">// evito el max execution time</span>
	<span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'max_execution_time'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// evito el timeout</span>
	<span style="color: #990000;">set_time_limit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// prevengo la detencion del script</span>
	<span style="color: #990000;">ignore_user_abort</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// inicio el tiempo actual</span>
	<span style="color: #000088;">$tiempo_actual</span> <span style="color: #339933;">=</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//-------------------------------------	</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/* MIME TYPES */</span>
	<span style="color: #666666; font-style: italic;">// Necesarios para que iexplorer descargue el archivo</span>
	<span style="color: #666666; font-style: italic;">// y no muestre simbolos raros (aunque si el mime no coincide, los mostrará igual)</span>
	<span style="color: #666666; font-style: italic;">// Agregar todos los necesarios según el htaccess</span>
&nbsp;
	<span style="color: #000088;">$mymes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rar'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #0000ff;">'application/x-rar-compressed'</span><span style="color: #339933;">,</span>
				   <span style="color: #0000ff;">'zip'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'application/zip'</span><span style="color: #339933;">,</span>
				   <span style="color: #0000ff;">'iso'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'application/octet-stream'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//-------------------------------------</span>
	<span style="color: #666666; font-style: italic;">/* Estados */</span>
	<span style="color: #666666; font-style: italic;">// -1 = descarga fallida</span>
	<span style="color: #666666; font-style: italic;">// 0 = descargando</span>
	<span style="color: #666666; font-style: italic;">// 1 = descarga exitosa</span>
	<span style="color: #666666; font-style: italic;">//-------------------------------------</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//-------------------------------------</span>
	<span style="color: #666666; font-style: italic;">/* Parametros Generales */</span>
	<span style="color: #666666; font-style: italic;">// Descargas Máx. de forma simultanea</span>
	<span style="color: #000088;">$max_simultaneas</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Tiempo de espera en segundos</span>
	<span style="color: #000088;">$tiempo_espera</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//-------------------------------------</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/* Conexión con MySQL */</span>
	<span style="color: #000088;">$recurso_sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> or <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'MySQL no disponible'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'limitar'</span><span style="color: #339933;">,</span><span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Base de datos seleccionada no disponible'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Inicio en 0 bytes el maximo y el total descargado actualmente</span>
	<span style="color: #000088;">$actual</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$maximo</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// prevengo ataques sobre la variable del archivo</span>
	<span style="color: #000088;">$extension</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'extension'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$nombre_archivo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">addslashes</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'archivo'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.'</span><span style="color: #339933;">.</span><span style="color: #000088;">$extension</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	
&nbsp;
	<span style="color: #666666; font-style: italic;">// completo el path hacia el archivo, incluyo la carpeta &quot;files&quot;</span>
	<span style="color: #000088;">$ruta_archivo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'files/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre_archivo</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// verifico que el archivo exista, y que tenga un nombre</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ruta_archivo</span><span style="color: #009900;">&#41;</span> OR <span style="color: #000088;">$nombre_archivo</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Envio 404 archivo no existe</span>
		<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HTTP/1.0 404 Not Found&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// termino el script</span>
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Archivo no encontrado: &amp;lt;b&amp;gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre_archivo</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;lt;/b&amp;gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>	
&nbsp;
	<span style="color: #666666; font-style: italic;">// Obtengo la ip del visitante</span>
	<span style="color: #666666; font-style: italic;">// existen diversos metodos, y mucho mejores que el actual</span>
	<span style="color: #666666; font-style: italic;">// sin embargo solo esta a metodo de ejemplo</span>
	<span style="color: #000088;">$ip</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>	
&nbsp;
	<span style="color: #666666; font-style: italic;">// Busco si el archivo seleccionado se esta descargando desde la ip del cliente</span>
	<span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT id FROM descargas WHERE ip=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$ip</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; AND archivo=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre_archivo</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; AND estado=0 '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// obtengo las filas devueltas por el recurso</span>
	<span style="color: #000088;">$num</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_num_rows</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// se inicializa la variable de autorizacion como false</span>
	<span style="color: #000088;">$autorizado</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// variable auxiliar, que permite saber si el tiempo de espera ha caducado para un registro en la bd</span>
	<span style="color: #000088;">$autorizado_update</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// variable para saber si el usuario se encuentra bajando el archivo seleccionado</span>
	<span style="color: #000088;">$descargando</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// si no existen registros (no se esta descargando el archivo actual en la ip actual)</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$num</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// se eliminan las descargas incompletas</span>
		<span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DELETE FROM descargas WHERE estado=-1 '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Consulta que extrae de la base de datos todas las descargas por ip y ordenadas segun el tiempo_espera</span>
		<span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT id,estado, tiempo_espera FROM descargas WHERE ip=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$ip</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; AND estado !=-1 ORDER BY tiempo_espera ASC '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// se cuentan las coincidencias</span>
		<span style="color: #000088;">$num</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_num_rows</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// inicializo tiempo a esperar</span>
		<span style="color: #000088;">$tiempo_a_esperar</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tiempo_actual</span><span style="color: #339933;">+</span><span style="color: #000088;">$tiempo_espera</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
&nbsp;
		<span style="color: #666666; font-style: italic;">// si no existen coincidencias o son inferiores al limite max de descargas simultaneas</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$num</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> OR <span style="color: #000088;">$num</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #000088;">$max_simultaneas</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// se autoriza la descarga</span>
			<span style="color: #000088;">$autorizado</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// se recogen los datos</span>
			<span style="color: #000088;">$datos</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// si la primera descarga esta con el tiempo de espera caducado y ya se descargo</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tiempo_actual</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$datos</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tiempo_espera'</span><span style="color: #009900;">&#93;</span> AND <span style="color: #000088;">$datos</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'estado'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'1'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// actualizo el tiempo de espera y se autoriza la descarga</span>
				<span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'UPDATE FROM descargas SET tiempo_espera=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tiempo_a_esperar</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;,archivo=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre_archivo</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;,estado=0 WHERE id='</span><span style="color: #339933;">.</span><span style="color: #000088;">$datos</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #666666; font-style: italic;">// se pasa el identificador</span>
				<span style="color: #000088;">$identificador</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$datos</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$autorizado_update</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$autorizado</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// de lo contrario, activo la variable que controla el estado del archivo</span>
	<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$descargando</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// si no se encuentra autorizado, envio un error.</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$autorizado</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			 <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HTTP/1.0 503 Service Unavailable'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
&nbsp;
			 <span style="color: #666666; font-style: italic;">// si se esta descargando arrojo un error</span>
			 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$descargando</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			 	<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Ya te encuentras descargando el archivo seleccionado &amp;lt;b&amp;gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre_archivo</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;lt;/b&amp;gt;.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			 <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
  			 	<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No estas autorizado a descargar más de '</span><span style="color: #339933;">.</span><span style="color: #000088;">$max_simultaneas</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' archivos de forma simultanea o a descargar esa cantidad sin esperar al menos '</span><span style="color: #339933;">.</span><span style="color: #000088;">$tiempo_espera</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' minutos.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			 <span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// solo se inserta si el registro es nuevo</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$autorizado_update</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// Se registra, automaticamente el estado es &quot;descargando&quot;</span>
			<span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'INSERT INTO descargas (ip,archivo,tiempo_espera) VALUES (&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$ip</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;,&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre_archivo</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;,&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tiempo_a_esperar</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;) '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$identificador</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_insert_id</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #666666; font-style: italic;">// calculo el peso de archivo</span>
		<span style="color: #000088;">$maximo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ruta_archivo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
		<span style="color: #666666; font-style: italic;">// cabeceras de control</span>
		<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: '</span><span style="color: #339933;">.</span><span style="color: #000088;">$mymes</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$extension</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Disposition: attachment; filename=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombre_archivo</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-length: '</span><span style="color: #339933;">.</span><span style="color: #000088;">$maximo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Cache-control: private'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 	
&nbsp;
		<span style="color: #666666; font-style: italic;">// abro el recurso de archivo en modo lectura</span>
		<span style="color: #000088;">$fd</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$ruta_archivo</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
		<span style="color: #666666; font-style: italic;">// mientras el recurso contenga bytes por leer</span>
		<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">feof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fd</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>			
&nbsp;
			<span style="color: #666666; font-style: italic;">// compruebo si el usuario ha detenido la ejecucion del script</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">connection_status</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// envio funcion de salida</span>
				comprobarDescarga<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #666666; font-style: italic;">// se detiene el script, el cliente se desconecto.</span>
				<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// leo solo 10kb del archivo</span>
			<span style="color: #000088;">$buffer</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fd</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10240</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// aumento la variable actual descargado</span>
			<span style="color: #000088;">$actual</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$buffer</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// muestro los 10kb que lei anteriormente</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$buffer</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// Esta funcion me permite detener el while en microsegundos para limitar los kb de descarga</span>
			<span style="color: #990000;">usleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">300000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
			<span style="color: #666666; font-style: italic;">// En este caso, cada 1/3 de segundo se entregan 10kb, entonces el cliente tendrá disponible solo 30kb apróx. por segundo.</span>
&nbsp;
		<span style="color: #009900;">&#125;</span>
		<span style="color: #666666; font-style: italic;">// cierro el recurso</span>
		<span style="color: #990000;">fclose</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$fd</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// envio la funcion de salida</span>
		comprobarDescarga<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// termino el script</span>
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
	<span style="color: #666666; font-style: italic;">// Esta es la funcion de salida, que se ejecuta cuando el usuario cancela el script, o se realiza la descarga</span>
	<span style="color: #000000; font-weight: bold;">function</span> comprobarDescarga<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	 <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$actual</span><span style="color: #339933;">,</span> <span style="color: #000088;">$maximo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurso_sql</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tiempo_espera</span><span style="color: #339933;">,</span> <span style="color: #000088;">$identificador</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// renuevo el tiempo actual</span>
		<span style="color: #000088;">$tiempo_actual</span> <span style="color: #339933;">=</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$tiempo_a_esperar</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tiempo_actual</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$tiempo_espera</span><span style="color: #339933;">;</span>		
&nbsp;
		<span style="color: #666666; font-style: italic;">// si se descargo el archivo de forma correcta</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$actual</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #000088;">$maximo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'UPDATE descargas SET estado=1,tiempo_espera=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tiempo_a_esperar</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; WHERE id='</span><span style="color: #339933;">.</span><span style="color: #000088;">$identificador</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// si se detuvo el script</span>
		<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
			<span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'UPDATE descargas SET estado=-1 WHERE id='</span><span style="color: #339933;">.</span><span style="color: #000088;">$identificador</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurso_sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// termino el script</span>
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></div></div>

<p><a href="http://www.donubu.com/uploads/limitar.rar" target="_self"><strong>Descargar el archivo limitar.php</strong></a></p>
<p>Son aproximadamente 170 líneas incluyendo los comentarios que son realmente necesarios para los novatos (aunque a veces, entorpecen la interpretación visual del script). Es el código completo probado y revisado por última vez el Viernes 16 de mayo del 2008. Realizarlo me tomó más de 2 horas, y 1 hora en realizar pruebas.</p>
<p>Existen varios ejemplos en la red, pero ninguno cubre temas como &#8220;detectar si el usuario se desconecto, si el archivo se bajo completamente, controlar un número de descargas simultáneas, etc&#8230;&#8221;</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2010/02/23/configurar-bw_mod-dentro-de-cpanel/" title="Configurar bw_mod dentro de CPANEL">Configurar bw_mod dentro de CPANEL</a></li><li><a href="http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/" title="Paneles de Administración de Servidores">Paneles de Administración de Servidores</a></li><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li><li><a href="http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/" title="Oportunidad Digital &#8220;Fotografía&#8221;">Oportunidad Digital &#8220;Fotografía&#8221;</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2008/05/16/tutorial-3-limitar-descargas-con-php-y-mysql-descargas-simultaneas-y-velocidad-de-bajada/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>htmlSQL &#8211; Un parser SQL para archivos HTML</title>
		<link>http://www.donubu.com/2008/04/13/htmlsql-un-parser-sql-para-archivos-html/</link>
		<comments>http://www.donubu.com/2008/04/13/htmlsql-un-parser-sql-para-archivos-html/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 22:16:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[browser]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[formulario]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[libreria]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.donubu.com/?p=76</guid>
		<description><![CDATA[Navegando en la web, me encontré con htmlSQL (es bastante añejo pero funcional) una clase php que se complementa con Snoopy (Simula ser un cliente web en PHP, y puede, por ejemplo, enviar formularios de forma transparente) y es capaz de obtener a través de expresiones regulares parte del contenido HTML, y todo gracias a [...]]]></description>
			<content:encoded><![CDATA[<p>Navegando en la web, me encontré con <a href="http://www.jonasjohn.de/lab/htmlsql.htm" target="_blank">htmlSQL</a> (<em><strong>es bastante añejo pero funcional</strong></em>) una clase php que se complementa con <a href="http://snoopy.sourceforge.net/" target="_blank">Snoopy</a> <em>(Simula ser un cliente web en PHP, y puede, por ejemplo, enviar formularios de forma transparente)</em> y es capaz de obtener a través de expresiones regulares parte del contenido HTML, y todo gracias a consultas <a href="http://es.wikipedia.org/wiki/SQL" target="_blank">SQL</a>.</p>
<p><strong>Un Ejemplo gráfico:</strong></p>
<p><img class="alignnone size-full wp-image-77" title="htmlsql_example" src="http://www.donubu.com/uploads/htmlsql_example.png" alt="" width="425" height="169" /><br />
<br class="limpiar" /><br />
En la parte Azul, se pueden especificar que atributos se van a devolver en la consulta, en Morado se pueden especificar las etiquetas en las cuales sera consultada la parte Verde. <a href="http://www.jonasjohn.de/lab/htmlsql/" target="_blank">Un demo online se encuentra disponible</a> para que realicen pruebas.</p>
<p>Más que &#8220;utilizar&#8221;, voy a &#8220;estudiar&#8221; la librería y ver si puedo crear algo similar y más acorde a mi forma de programar.</p>
<p>Para lograr un efecto similar, pero de lado del cliente, acostumbro a usar <a href="http://prototypejs.org/" target="_blank">PROTOTYPE JS</a>.</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/" title="Oportunidad Digital &#8220;Fotografía&#8221;">Oportunidad Digital &#8220;Fotografía&#8221;</a></li><li><a href="http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/" title="Paneles de Administración de Servidores">Paneles de Administración de Servidores</a></li><li><a href="http://www.donubu.com/2011/04/04/sitio-web-sonrie-ahora/" title="Sitio web sonrie ahora">Sitio web sonrie ahora</a></li><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2008/04/13/htmlsql-un-parser-sql-para-archivos-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coloreador de Sintáxis WP-SYNTAX</title>
		<link>http://www.donubu.com/2008/01/10/prueba-coloreador-sintaxis-wp-syntax/</link>
		<comments>http://www.donubu.com/2008/01/10/prueba-coloreador-sintaxis-wp-syntax/#comments</comments>
		<pubDate>Thu, 10 Jan 2008 18:13:36 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[plugins]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[coloreador]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sintáxis]]></category>

		<guid isPermaLink="false">http://www.donubu.com/2008/01/10/prueba-coloreador-sintaxis-wp-syntax/</guid>
		<description><![CDATA[Estoy probando el coloreador de sintáxis &#8220;wp-syntax&#8221; un plugin para colorear códigos en diversos lenguajes: php, asp, perl, css, etc. Es bastante sencillo de instalar y no requiere ningún tipo de configuración especial. Para Colorear, simplemente deben usar los tags &#60;pre lang="LENGUAJE" line="1"&#62;&#60;/pre&#62;. Donde &#8220;LENGUAJE&#8221; debe ser el escogido (php, asp, etc&#8230;) en mayúsculas. Ejemplo [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy probando el coloreador de sintáxis &#8220;<a href="http://wordpress.org/extend/plugins/wp-syntax/" target="_blank">wp-syntax</a>&#8221; un plugin para colorear códigos en diversos lenguajes: php, asp, perl, css, etc.</p>
<p>Es bastante sencillo de instalar y no requiere ningún tipo de configuración especial. Para Colorear, simplemente deben usar los tags <code>&lt;pre lang="LENGUAJE" line="1"&gt;</code><code>&lt;/pre&gt;.</code> Donde  &#8220;LENGUAJE&#8221; debe ser el escogido (php, asp, etc&#8230;) en mayúsculas.</p>
<p><strong>Ejemplo</strong><br />
<span id="more-22"></span><br />
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> ProductosController <span style="color: #000000; font-weight: bold;">extends</span> AppController <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Productos'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$helpers</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Html'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Form'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Producto</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">recursive</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
 	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'productos'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Invalid Producto.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	<span style="color: #009900;">&#125;</span>
 	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'producto'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Producto</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Esas son unas líneas de código de php (cakephp para ser exacto).</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2008/01/05/zend-studio-ide-php/" title="Zend Studio &#8211; IDE PHP">Zend Studio &#8211; IDE PHP</a></li><li><a href="http://www.donubu.com/2008/01/14/coloreador-sintaxis-online-iris/" title="Coloreador de Sintáxis pero ONLINE">Coloreador de Sintáxis pero ONLINE</a></li><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li><li><a href="http://www.donubu.com/2010/02/23/configurar-bw_mod-dentro-de-cpanel/" title="Configurar bw_mod dentro de CPANEL">Configurar bw_mod dentro de CPANEL</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2008/01/10/prueba-coloreador-sintaxis-wp-syntax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Studio &#8211; IDE PHP</title>
		<link>http://www.donubu.com/2008/01/05/zend-studio-ide-php/</link>
		<comments>http://www.donubu.com/2008/01/05/zend-studio-ide-php/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 18:34:31 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[coloreador]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[sintáxis]]></category>
		<category><![CDATA[studio]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.donubu.com/2008/01/05/zend-studio-ide-php/</guid>
		<description><![CDATA[Sin duda el mejor IDE para una aplicación web es Zend Studio. Es una completa suite de herramientas para desarrollo y testeo de nuestras aplicaciones y/o scripts. Es de los mismos encargados del motor del lenguaje de programación PHP. En un principio me asustó que trabajase sobre &#8220;java&#8221; ya que la mayoría de las aplicaciones [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.donubu.com/uploads/zendstudio.png" alt="zend" height="130" width="244" /><br class="limpiar" /></p>
<p>Sin duda <a href="http://http://www.zend.com/en/products/studio/" target="_blank">el mejor IDE para una aplicación web es Zend Studio</a>. Es una completa suite de herramientas para desarrollo y testeo de nuestras aplicaciones y/o scripts. Es de los mismos encargados del motor del <a href="http://www.php.net" target="_blank">lenguaje de programación PHP</a>.</p>
<p>En un principio me asustó que trabajase sobre &#8220;<a href="http://www.java.com/es/" target="_blank">java</a>&#8221; ya que la mayoría de las aplicaciones sobre esta máquina virtual son &#8220;lentas&#8221;. Sin embargo y desactivando la opción de autocompletado de clases y funciones, logré que corriese mas rápido que <a href="http://www.mpsoftware.dk/phpdesigner.php" target="_blank">phpdesigner 2007</a> (que era el que usaba con anterioridad).<br />
<span id="more-20"></span></p>
<p>Me gustó la opción de presionar F5 para hacer correr el script dentro de una consola, así me ahorro tener que pasarme al navegador para evaluar el resultado. Posee un entorno no obstructivo que permite trabajr de forma cómoda y sin toparse con molestas ventanas que para lo único que sirven es para estorbar.</p>
<p>Ahora, estoy utilizandolo para terminar de desarrollar una aplicación para un SPA (Uso también cakePHP).</p>
<p>Pueden <a href="http://www.zend.com/en/products/studio/downloads" target="_blank">bajarse una versión trial</a> para que evalúen, aunque la licencia esta &#8220;sobrevalorada&#8221; a un precio superior a los 250 dólares. ($125.000 pesos chilenos).</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2008/01/10/prueba-coloreador-sintaxis-wp-syntax/" title="Coloreador de Sintáxis WP-SYNTAX">Coloreador de Sintáxis WP-SYNTAX</a></li><li><a href="http://www.donubu.com/2008/01/14/coloreador-sintaxis-online-iris/" title="Coloreador de Sintáxis pero ONLINE">Coloreador de Sintáxis pero ONLINE</a></li><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li><li><a href="http://www.donubu.com/2010/02/26/nivea-silvermoto/" title="Nivea Silvermoto">Nivea Silvermoto</a></li><li><a href="http://www.donubu.com/2010/01/27/oportunidad-digital-fotografia/" title="Oportunidad Digital &#8220;Fotografía&#8221;">Oportunidad Digital &#8220;Fotografía&#8221;</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2008/01/05/zend-studio-ide-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Paneles de Administración de Servidores</title>
		<link>http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/</link>
		<comments>http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 15:23:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[administracion]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[panel]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[so]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[administrar]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[configurar]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[ispconfig]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[vhcs]]></category>

		<guid isPermaLink="false">http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/</guid>
		<description><![CDATA[Hace un par de semanas, me tocó asistir a una entrevista en MEGA (Si, el canal privado) y posteriormente a LECHE2 una agencia creativa. Dentro de la conversación, se habló de que se necesitaba que la persona supiese de administración de servidores. Viendo este requisíto, empecé a barajar las diferentes alternativas (opensource y de pago) [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.donubu.com/uploads/server.png" alt="server" align="left" height="150" width="145" />Hace un par de semanas, me tocó asistir a una entrevista en <a href="http://www.mega.cl" target="_blank">MEGA</a> (Si, el canal privado) y posteriormente a <a href="http://www.leche2.cl" target="_blank">LECHE2</a> una agencia creativa. Dentro de la conversación, se habló de que se necesitaba que la persona supiese de administración de servidores. Viendo este requisíto, empecé a barajar las diferentes alternativas (opensource y de pago) de paneles para administración web.</p>
<p>La idea es estar lo mas atento posible y preparado, ya que si todo va bien podría estar trabajando dentro del mes(me hace bastante falta).</p>
<p><span id="more-15"></span>Primero; conversando con el MIXGO y viendo su server, apareció &#8220;<a href="http://www.ispconfig.org" target="_blank">ISPCONFIG</a>&#8220;<img src="http://www.donubu.com/uploads/isp.png" alt="isp" align="left" height="77" width="137" /> bastante sencillo, fácil de instalar, con mas de 20 guías para las diversas <a href="http://www.linuxiso.com.ar/" target="_blank">distribuciones de linux</a>. La desventaja es que la unica manera de hacer funcionar de forma correcta un subdominio es &#8220;manual&#8221;. (Editando un par de archivos).</p>
<p><img src="http://www.donubu.com/uploads/gnupanel.png" alt="PANEL" align="left" height="91" width="218" /> Posteriormente recurrí a google y al boton &#8220;voy a tener suerte&#8221;. Me topé con  &#8220;<a href="http://www.gnupanel.org/GPL-hosting-control-panel-for-Debian.php" target="_blank">GNUPanel</a>&#8221; se vé que tiene resuelto el tema de subdominios, pero como su nombre lo dice &#8220;for debian&#8221;, lo cual me limíta bastante, ya que nosé que distro se va a usar.</p>
<p><img src="http://www.donubu.com/uploads/vhcs.png" alt="vhcs" align="left" height="114" width="105" />Finalmente,  <a href="http://vhcs.net/new/" target="_blank">VHCS</a>  me ofrece todo lo que los demás, PERO, no tengo ninguna referencia válida que lo utilice.</p>
<p>Me falto mencionar a <a href="http://www.cpanel.com" target="_blank">CPANEL</a> como el único por el cual pagaría su licencia. Ya que está más que probado y vale la pena utilizar.</p>
<p>Resumiendo, &#8220;Debian&#8221; por obra y gracia va a tener que ser mi Distro a utilizar, y esperar a opiniones de entendidos para escoger un panel opensource o ver si deciden comprar una licencia para el de pago. (Suponiendo que todo va bien)</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2009/01/07/instalar-cakephp-desde-0-y-configurar-la-consola-en-windows/" title="Instalar Cakephp desde 0 y configurar la consola en windows">Instalar Cakephp desde 0 y configurar la consola en windows</a></li><li><a href="http://www.donubu.com/2010/02/23/configurar-bw_mod-dentro-de-cpanel/" title="Configurar bw_mod dentro de CPANEL">Configurar bw_mod dentro de CPANEL</a></li><li><a href="http://www.donubu.com/2009/01/30/programacion-en-php-migrar-de-entornos-de-desarrollo-a-productivos/" title="Programacion en PHP, migrar de entornos de desarrollo a productivos">Programacion en PHP, migrar de entornos de desarrollo a productivos</a></li><li><a href="http://www.donubu.com/2008/05/16/tutorial-3-limitar-descargas-con-php-y-mysql-descargas-simultaneas-y-velocidad-de-bajada/" title="Tutorial 3: Limitar Descargas con PHP y MySQL &#8211; descargas simultaneas y velocidad de bajada">Tutorial 3: Limitar Descargas con PHP y MySQL &#8211; descargas simultaneas y velocidad de bajada</a></li><li><a href="http://www.donubu.com/2008/04/13/htmlsql-un-parser-sql-para-archivos-html/" title="htmlSQL &#8211; Un parser SQL para archivos HTML">htmlSQL &#8211; Un parser SQL para archivos HTML</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2008/01/02/administracion-servidor-web-y-de-aplicacion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP: un buen pastel de chocolate</title>
		<link>http://www.donubu.com/2007/12/29/cakephp-introduccion/</link>
		<comments>http://www.donubu.com/2007/12/29/cakephp-introduccion/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 22:40:33 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[descargas]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://www.donubu.com/2007/12/29/cakephp-introduccion/</guid>
		<description><![CDATA[CAKEPHP Hace bastante tiempo atras, me presentaron este framework basado en RubyOnRails pero programado en PHP. Utiliza la metodología MVC y posee una comunidad en inglés y en español con muchos artículos, tutoriales y manuales. (Menciono también el bakery o repositorio para cakephp). Posee lo esencial para crear &#8220;mantenedores&#8221;, añadiendo de forma automática acciones como [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cakephp.org/" target="_blank">CAKEPHP</a><br />
<img src="http://www.donubu.com/uploads/cakephp.png" align="left" height="94" width="93" />Hace bastante tiempo atras, me presentaron este framework basado en <a href="http://www.rubyonrails.org/" target="_blank">RubyOnRails</a> pero programado en PHP. Utiliza la metodología <a href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador" target="_blank">MVC</a> y posee una <a href="http://groups.google.com/group/cake-php?lnk=srg" target="_blank">comunidad en inglés</a> y <a href="http://groups.google.com/group/CakePHP-es/" target="_blank">en español</a> con muchos artículos, tutoriales y manuales. (Menciono también el <a href="http://bakery.cakephp.org/" target="_blank">bakery o repositorio</a> para cakephp).<br />
<span id="more-8"></span>Posee lo esencial para crear &#8220;mantenedores&#8221;, añadiendo de forma automática acciones como &#8220;ver, agregar, editar, eliminar&#8221; o <a href="http://es.wikipedia.org/wiki/CRUD" target="_blank">CRUD</a> (Create, Retrieve, Update and Delete), y además, puedes usar una consola personalizada para generar el código de tu aplicación de forma rápida.</p>
<p>Integra helpers, componentes y plugins de forma nativa, entre estos, generadores de formularios, de links (basados en html o ajax), funciones para limpiar el código  (sanitize), etc.</p>
<p>No se lo recomiendo a alguien que aún esta aprendiendo a usar php ya que requiere un conocimiento avanzado y harta paciencia <img src='http://www.donubu.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>No me había decidido antes, ya que estaba programando mi propio framework (viFrame) y aunque ya posee una version estable, he decidido dejar ese proyecto de lado.</p>

<h3>Articulos Relacionados</h3><ul class="related_post"><li><a href="http://www.donubu.com/2009/10/28/tips-cakephp/" title="Tips cakePHP">Tips cakePHP</a></li><li><a href="http://www.donubu.com/2009/01/30/programacion-en-php-migrar-de-entornos-de-desarrollo-a-productivos/" title="Programacion en PHP, migrar de entornos de desarrollo a productivos">Programacion en PHP, migrar de entornos de desarrollo a productivos</a></li><li><a href="http://www.donubu.com/2009/01/07/instalar-cakephp-desde-0-y-configurar-la-consola-en-windows/" title="Instalar Cakephp desde 0 y configurar la consola en windows">Instalar Cakephp desde 0 y configurar la consola en windows</a></li><li><a href="http://www.donubu.com/2008/01/05/cakephp-lo-unico-negativo-documentacion/" title="cakePHP: Lo Único Negativo">cakePHP: Lo Único Negativo</a></li><li><a href="http://www.donubu.com/2010/07/14/de-vuelta-luego-de-muchas-campanas-mas/" title="De vuelta luego de muchas campañas más">De vuelta luego de muchas campañas más</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.donubu.com/2007/12/29/cakephp-introduccion/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

