<?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>Fillito &#187; PHP</title>
	<atom:link href="http://www.fillito.com/blog/category/programacion/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fillito.com/blog</link>
	<description>Blog Personal de Daniel García</description>
	<lastBuildDate>Thu, 24 Mar 2011 18:44:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Manipulación de strings de PHP codificadas en UTF-8</title>
		<link>http://www.fillito.com/blog/manipulacion-strings-php-utf8-03-2009</link>
		<comments>http://www.fillito.com/blog/manipulacion-strings-php-utf8-03-2009#comments</comments>
		<pubDate>Tue, 31 Mar 2009 18:56:17 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[strings]]></category>
		<category><![CDATA[utf-8]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=599</guid>
		<description><![CDATA[Esta semana me he encontrado con un problema que me dió muchos quebraderos de cabeza pero que por suerte llegué a una solución El problema surgía al manipular cadenas de caracteres en php codificadas en UTF-8 con funciones del tipo ucwords, strtoupper, etc... Al pasarlas por éstas funciones, algunos caracteres se corrompían, y se guardaban [...]]]></description>
			<content:encoded><![CDATA[<p>Esta semana me he encontrado con un problema que me dió muchos quebraderos de cabeza pero que por suerte llegué a una solución <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
El problema surgía al manipular cadenas de caracteres en php codificadas en UTF-8 con funciones del tipo ucwords, strtoupper, etc...<br />
Al pasarlas por éstas funciones, algunos caracteres se corrompían, y se guardaban erroneamente.</p>
<p>Indagando un poco encontré la explicación a todos éstos problemas.<br />
Las funciones de manipulación de strings en PHP están programadas para trabajar con caracteres de 1 byte de longitud. De ésta manera, funciones como contar el número de caracteres que incluye una cadena (strlen) simplemente calcula el tamaño ocupado en memoria y divide por 1 byte. Todo esto se viene abajo al utilizar cadenas de caracteres codificadas con juegos de caracteres como UTF-8, en los que algunos caracteres pueden ocupar 2 o 3 bytes. Por lo tanto, muchas de las funciones típicas de trabajo con cadenas son peligrosas de usar si nuestros textos están codificados en UTF-8 y son susceptibles de contener éste tipo de caracteres de mayor tamaño, que al leer byte a byte, encontrará erroneamente los datos binarios correspondiente a dos (o tres) caracteres, en vez de uno.</p>
<p>Existe una lista de funciones "inseguras" al trabajar con cadenas con encodings que guarden caracteres de más de 1 byte. Son las siguientes :<code><br />
· ord<br />
</code><code> · </code><code>str_ireplace<br />
</code><code> · </code><code> str_pad<br />
</code><code> · </code><code> str_split<br />
</code><code> · </code><code> strcasecmp<br />
</code><code> · </code><code> strcspn<br />
</code><code> · </code><code> stristr<br />
</code><code> · </code><code> strlen<br />
</code><code> · </code><code> strpos<br />
</code><code> · </code><code> strrpos<br />
</code><code> · </code><code> strrev<br />
</code><code> · </code><code> strspn<br />
</code><code> · </code><code> strtolower<br />
</code><code> · </code><code> strtoupper<br />
</code><code> · </code><code> substr_replace</code><code><br />
</code><code> · </code><code> [l|r]trim </code> <span style="font-size:10px">(unicamente cuando se usa el segundo parametro)</span><br />
<code> · </code> <code>ucfirst<br />
</code><code> · </code><code> ucwords<br />
</code><br />
Si lo que necesitas es convertir toda la cadena a minúsculas (strtolower), a mayúsculas (strtoupper) o la primera letra de cada palabra a mayúsculas y el resto en minúsculas (ucwords), existe una alternativa que nos evitará tener que cambiar el encoding de nuestra cadena:</p>
<div class="igBar"><span id="lphp-2"><a href="#" onclick="javascript:showPlainTxt('php-2'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-2">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$string</span> = <a href="http://www.php.net/mb_convert_case"><span style="color:#000066;">mb_convert_case</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$string</span>, TIPO_ACCION, <span style="color:#FF0000;">"UTF-8"</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Donde TIPO_ACCION  puede tomar los  siguientes valores para obtener el resultado equivalente:  "<strong><code>MB_CASE_LOWER</code></strong>" (strtolower), "<strong><code>MB_CASE_UPPER</code></strong>" (strtoupper)  , "<strong><code>MB_CASE_TITLE</code></strong>" (ucwords)</p>
<p><strong><code>mb_convert_case</code></strong> es una función que permite la manipulación de los caracteres de una cadena de tipo multibyte.</p>
<p>Tienes muchas más <a href="http://es2.php.net/manual/en/ref.mbstring.php">funciones para cadenas multibyte</a>.</p>
<p>Un saludo !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/manipulacion-strings-php-utf8-03-2009/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Aceleradores de PHP + Instalación de xCache</title>
		<link>http://www.fillito.com/blog/aceleradores-php-instalacion-xcache-03-2009</link>
		<comments>http://www.fillito.com/blog/aceleradores-php-instalacion-xcache-03-2009#comments</comments>
		<pubDate>Tue, 24 Mar 2009 00:13:48 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[aceleradores php]]></category>
		<category><![CDATA[opcode]]></category>
		<category><![CDATA[xcache]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=544</guid>
		<description><![CDATA[Hace tiempo que llevo pensando en escribir un pequeño artículo sobre los Aceleradores de php. Y ésta semana, aprovechando que he instalado uno en una nueva máquina para hostear éste y algunos otros blogs más, me he animado a ello. Lo primero de todo, es entender qué es un Acelerador de php. Como su nombre [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo que llevo pensando en escribir un pequeño artículo sobre los Aceleradores de php. Y ésta semana, aprovechando que he instalado uno en una nueva máquina para hostear éste y algunos otros blogs más, me he animado a ello.</p>
<p>Lo primero de todo, es entender qué es un Acelerador de php.</p>
<p>Como su nombre bien indica, un acelerador de php es "algo" (ahora veremos qué..), que acelera nuestro código escrito en php. Si reflexionamos un poco llegaremos rápidamente a unas sencillas preguntas ¿Cómo puede hacer "algo" que nuestro código se ejecute más rápidamente? ¿Qué hace ésto que parece tan mágico? ¿Retoca nuestro codigo en tiempo real para optimizarlo? ¿Mágicamente hace que nuestro código consuma menos recursos? </p>
<p>Por supuesto que no...</p>
<p>La explicación es mucho más sencilla de lo que parece.<br />
Como bien sabemos, php no es un <a href="http://es.wikipedia.org/wiki/Lenguaje_compilado" target="_blank">lenguaje compilado</a>, sino un <a href="http://es.wikipedia.org/wiki/Lenguaje_interpretado" target="_blank">lenguaje interpretado</a> (script). Cuando nuestro servidor Apache, o un comando <a href="http://es2.php.net/features.commandline" target="_blank">CLI</a> llama al intérprete de php para que ejecute un determinado archivo, nuestro intérprete genera en tiempo real los <a href="http://es.wikipedia.org/wiki/C%C3%B3digo_de_operaci%C3%B3n" target="_blank">opcodes</a> necesarios para su ejecución. Cada vez que se llama a ejecutar uno de nuestros archivos, nuestro intérprete vuelve a compilar en tiempo real nuestros scripts, incluso cuando llamamos a un script que se haya ejecutado anteriormente. Es aquí donde entran en juego los Aceleradores de php. Su función es simplemente la de recubrir todo el proceso de compilación, guardar los estados compilados de nuestros scripts en memoria, y facilitar una interfaz automatizada que evalúa si es necesario compilar un script o si disponemos de una copia ya compilada en memoria. Osea, que un Acelerador de php, no es más que un "cacheador" de opcodes.<br />
Imaginaos cuánto tiempo y recursos ahorramos al evitar el compilado de toda nuestra home, o de nuestras páginas más visitadas.</p>
<p>La mejora de rendimiento es asombrosa, incluso podremos llegar a ver mejorado el rendimiento de carga de algunas páginas por 3.</p>
<p>Ésta es una de la mejoras de optimización más sencillas que podemos llevar a cabo en nuestro servidor web, y sin duda una de las mejores en relación dificultad de aplicación / mejoras claramente visibles obtenidas.</p>
<p>Existen muchos Aceleradores de php , como APC, eAccelerator, xCache , PHPA, ...<br />
Para gustos, colores. Seguro que encontrarás rápidamente un montón de comparativas, articulos a favor, en contra, y demás ...</p>
<p>Yo voy a explicar cómo instalar xCache (en una máquina Ubuntu). Por su extrema sencillez de instalación y excelente rendimiento.</p>
<p><span id="more-544"></span><span style="text-decoration: underline;"><strong>Instalación de xCache en Ubuntu</strong></span></p>
<p>Lo primero que vamos a hacer, descargarnos la última versión de xcache desde su <a href="http://xcache.lighttpd.net/" target="_blank">web oficial</a>. (En el momento de escribir ésto, la última versión era la 1.2.2. Para futuras versiones sustituir el archivo por su versión actual)<br/></p>
<div class="igBar"><span id="lcode-11"><a href="#" onclick="javascript:showPlainTxt('code-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-11">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">wget http:<span style="color:#FF9933; font-style:italic;">//xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz </span></div>
</li>
</ol>
</div>
</div>
</div>
<p>
Descomprimimios nuestro archivo recién descargado.<br/></p>
<div class="igBar"><span id="lcode-12"><a href="#" onclick="javascript:showPlainTxt('code-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-12">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">tar -zxf xcache-*.<span style="">tar</span>.<span style="">gz</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cd xcache </div>
</li>
</ol>
</div>
</div>
</div>
<p>
El siguiente paso es preparar nuestro xcache para su compilación, compilarlo e instalarlo<br/></p>
<div class="igBar"><span id="lcode-13"><a href="#" onclick="javascript:showPlainTxt('code-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-13">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">phpize</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">./configure --enable-xcache</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">make</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo make install </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>Nota:</strong> phpize es un script de shell que prepara las extensiones de php para su correcta compilación. Si no se encuentra instalado, simplemente instala el paquete php5-dev, que lo incluye<br/></p>
<div class="igBar"><span id="lcode-14"><a href="#" onclick="javascript:showPlainTxt('code-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-14">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo apt-get install php5-dev </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Para finalizar ya solo queda configurar nuestro php.ini. Simplemente concatenamos el archivo de configuración por defecto a nuestro php.ini, lo editamos, y nos aseguramos de que la ruta extensión esté apuntando correctamente. Posteriormente reiniciamos el servicio de Apache<br />
<br/></p>
<div class="igBar"><span id="lcode-15"><a href="#" onclick="javascript:showPlainTxt('code-15'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-15">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cat xcache.<span style="">ini</span> &gt;&gt; /etc/php5/apache2/php.<span style="">ini</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano /etc/php5/apache2/php.<span style="">ini</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">/etc/init.<span style="">d</span>/apache2 restart </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>En mi caso la extensión estaba en /usr/lib/php5/20060613/xcache.so.<br/></p>
<div class="igBar"><span id="lcode-16"><a href="#" onclick="javascript:showPlainTxt('code-16'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-16">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">zend_extension = /usr/lib/php5/<span style="color:#800000;color:#800000;">20060613</span>/xcache.<span style="">so</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
<br/><br/><br />
<!--more--><span style="text-decoration: underline;"><strong>Instalar Interfaz Web</strong></span></p>
<p>Una de las cosas buenas que tiene xCache, es que dispone de una interfaz web, que además de confirmarnos que xcache está correctamente instalado (una razón más que válida para instalarla <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), nos dará unas estadísticas bastante detalladas sobre el cacheo de opcodes.<br />
Para instalarlo no hay más que copiar la carpeta admin que encontraremos dentro de nuestro xcache recien descargado y descomprimido, y pegarla en nuestra raiz de apache.<br/></p>
<div class="igBar"><span id="lcode-17"><a href="#" onclick="javascript:showPlainTxt('code-17'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-17">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cp -a admin<span style="color:#008000;">/* /var/www/xcache-admin/ </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Podemos (y debemos <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) configurar nuestro acceso a la interfaz de xcache desde nuestro php.ini asignando los valores a las opciones xcache.admin.user y xcache.admin.pass (esta última debe ir codificada en md5)<br/></p>
<div class="igBar"><span id="lcode-18"><a href="#" onclick="javascript:showPlainTxt('code-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-18">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">xcache.<span style="">admin</span>.<span style="">user</span> = <span style="color:#CC0000;">"admin"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">xcache.<span style="">admin</span>.<span style="">pass</span> = <span style="color:#CC0000;">"5f4dcc3b5aa765d61d8327deb882cf99"</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Después de ésto ya no queda más que reiniciar nuestro servicio de Apache y probar que todo ha ido bien y nuestro xcache está cacheando correctamente. Nuestra url debería ser algo parecido a www.dominio.com/xcache-admin y estaría protegido por contraseña.<br />
<br/><br/><br />
Bueno, espero que sea útil.<br />
Un saludo !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/aceleradores-php-instalacion-xcache-03-2009/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Averiguar una clase y sus metodos en php</title>
		<link>http://www.fillito.com/blog/averiguar-una-clase-y-sus-metodos-en-php-12-2008</link>
		<comments>http://www.fillito.com/blog/averiguar-una-clase-y-sus-metodos-en-php-12-2008#comments</comments>
		<pubDate>Tue, 09 Dec 2008 00:51:47 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[funciones útiles]]></category>
		<category><![CDATA[objetos]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=413</guid>
		<description><![CDATA[Si alguna vez has tenido que lidiar con código ajeno, o has integrado algún paquete de clases de terceras partes, o trabajado con algún API que te devuelva los datos en forma de objeto; probablemente hayas tenido la necesidad de conocer los métodos disponibles para interactuar con un objeto. Si a eso le sumamos una [...]]]></description>
			<content:encoded><![CDATA[<p>Si alguna vez has tenido que lidiar con código ajeno, o has integrado algún paquete de clases de terceras partes, o trabajado con algún API que te devuelva los datos en forma de objeto; probablemente hayas tenido la necesidad de conocer los métodos disponibles para interactuar con un objeto. Si a eso le sumamos una documentación pobre de las clases que vamos a usar, estamos ante un buen dolor de cabeza y unas cuantas horas de tiempo perdido estudiando el código para poder trabajar.</p>
<p>Éste fin de semana tuve ese problema, y buscando un poco, encontré dos métodos de php que se han convertido en imprescindibles para mí.</p>
<p>La primera función nos permite conocer el nombre de la clase de un objeto</p>
<div class="igBar"><span id="lphp-23"><a href="#" onclick="javascript:showPlainTxt('php-23'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-23">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">string <a href="http://www.php.net/get_class"><span style="color:#000066;">get_class</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>OBJECT<span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Que pasándole como parámetro el objeto, nos devolverá un string con el nombre de la clase.</p>
<p>La segunda es si cabe aún más útil, ya que para una clase, nos devuelve un array con la lista de metodos públicos disponibles.</p>
<div class="igBar"><span id="lphp-24"><a href="#" onclick="javascript:showPlainTxt('php-24'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-24">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/array"><span style="color:#000066;">array</span></a> <a href="http://www.php.net/get_class_methods"><span style="color:#000066;">get_class_methods</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>string class_name<span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Imaginad ahora qué bonito lo que obtenemos, si combinamos éstos dos métodos:</p>
<div class="igBar"><span id="lphp-25"><a href="#" onclick="javascript:showPlainTxt('php-25'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-25">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$objetoMisterioso</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$metodosDisponibles</span>=<a href="http://www.php.net/get_class_methods"><span style="color:#000066;">get_class_methods</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/get_class"><span style="color:#000066;">get_class</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$objetoMisterioso</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print_r"><span style="color:#000066;">print_r</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$metodosDisponibles</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Que nos devolverá algo parecido a:</p>
<div class="igBar"><span id="lcode-26"><a href="#" onclick="javascript:showPlainTxt('code-26'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-26">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Array<span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>=&gt;getMethod</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>=&gt;setMethod</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#93;</span>=&gt;delElement</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Realmente útil y nos ahorrará mucho tiempo cuando trabajemos con objetos que no conocemos del todo bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/averiguar-una-clase-y-sus-metodos-en-php-12-2008/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP Conference 08 &#8211; Barcelona</title>
		<link>http://www.fillito.com/blog/php-conference-08-barcelona-09-2008</link>
		<comments>http://www.fillito.com/blog/php-conference-08-barcelona-09-2008#comments</comments>
		<pubDate>Sun, 28 Sep 2008 20:01:39 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[deathmonger]]></category>
		<category><![CDATA[Minube]]></category>
		<category><![CDATA[munix]]></category>
		<category><![CDATA[php conference]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=311</guid>
		<description><![CDATA[Éste fin de semana asistimos ivan, munix , alex y yo al PHP Conference 08 que se celebraba en Cornellá , Barcelona. Después de un accidentadísimo viaje en el que pillamos un tren de 9 horas desde Madrid que pensábamos teníamos camas, llegamos a Barcelona. Pillamos el metro hasta Cornellá caminamos hasta llegar a estar [...]]]></description>
			<content:encoded><![CDATA[<p><a title="PHP Conference 08 - Barcelona por fillito, en Flickr" href="http://www.flickr.com/photos/fillito/2895468977/"><img src="http://farm4.static.flickr.com/3211/2895468977_c5ef674b21_m.jpg" border="0" alt="PHP Conference 08 - Barcelona" hspace="5" width="240" height="161" align="left" /></a>Éste fin de semana asistimos <a href="http://www.twitter.com/ugarte">ivan</a>, munix , <a href="http://www.deluhoo.com">alex</a> y yo al PHP Conference 08 que se celebraba en Cornellá , Barcelona.</p>
<p>Después de un accidentadísimo viaje en el que pillamos un tren de 9 horas desde Madrid que <strong>pensábamos</strong> teníamos camas, llegamos a Barcelona. Pillamos el metro hasta Cornellá caminamos hasta llegar a estar a unos 50 metros del Citylab, donde se celebraba el evento. Al llegar a esa altura, por alguna extraña razón pensamos : "No, ... creo que por aquí no es. Vamos a dar la vuelta y tomar otro camino". Creo que llegamos a caminar unos 4 kilómetros y a tirar a la basura la hora de antelación con la que habíamos llegado. Entonces llamamos a un taxi que nos llevó al Citylab. Imaginaos nuestras caras cuando nos dimos cuenta lo cerca que estubimos de allí.</p>
<p>Después de acreditarnos, entramos a tiempo a la primera charla de Marcus Bointon sobre Emailing en PHP. Fué bastante entretenida. Nos contaron qué librerías había disponible para el envio de mails desde php y sus características. Aunque luego la explicación detallada, trucos, consejos y demás, estuvo enfocada al uso de phpmailer.<br />
Luego fuimos a una interesantísima charla llamada "<a href="http://www.bierkandt.org/php_barcelona2008.pdf">How to Pimp High Volume websites</a>" por <a href="http://www.bierkandt.org/">Jens Bierkandt</a>,  uno de los desarrolladores de Softonic. Esta es la charla que más me gustó y a la que creo que más pro,vecho sacaré. Nos hablaron tanto de cómo organizar una arquitectura basada en balanceo de servidores web, replicación de servidores de bases de datos, cachés, uso de memcached, utilidades de diagnóstico y seguimiento , etc...<br />
Me alegró saber que todas las acciones que habiamos llevado a cabo en minube nos las recomendaron allí, pero también me alegró conocer nuevas formas adicionales que aún no habíamos llevado a cabo.</p>
<p>Luego asistimos a la ponencia de Zoë Slattery sobre indexación y motores de búsqueda en php. Ésta me interesó menos, ya que no se habló sobre metodologías a seguir, o formas de desarrollar un buscador , sino del comportamiento interno de php a la hora de analizar formalmente los textos, extracción de tokens , etc...</p>
<p>La última de las charlas fué la de XDebug por Derick Rethans, donde nos presentaron la herramienta de debuggin y nos explicaron cómo configurarla, y ponerla en práctica. Además de algunos trucos, herramientas complementarias e incluso extensiones de firefox para trabajar con el debuggin de XDebug.</p>
<p>Me perdí una charla sobre SQLite 3 , ya que estaba un poco cansado y aproveché para conectarme a internet un rato , y cargar el portatil (que durante el viaje escasearon mucho los enchufes)</p>
<p>A las 6 o así acabó todo con la keynote de despedida y un sorteo de algunos regalos (no me llevé nada <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).<br />
Después de eso ya sólo nos quedó otras 9 horas de viaje de vuelta en el tren Estrella de Renfe ... que dudo vuelva a coger en mi vida.<br />
Si queréis podeis ver algunas de <a href="http://www.flickr.com/photos/fillito/sets/72157607560034085/">mis fotos del viaje y la conferencia</a>, y <a href="http://www.flickr.com/photos/deathmonger/sets/72157607557500511/">algunas otras de Alex</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/php-conference-08-barcelona-09-2008/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evitar links externos con Amazon S3</title>
		<link>http://www.fillito.com/blog/evitar-links-externos-con-amazon-s3-09-2008</link>
		<comments>http://www.fillito.com/blog/evitar-links-externos-con-amazon-s3-09-2008#comments</comments>
		<pubDate>Sun, 14 Sep 2008 18:47:21 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[links externos]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=287</guid>
		<description><![CDATA[Si hemos elegido Amazon S3 como sistema de almacenamiento virtual , quizás nos interese tener almacenados archivos que se puedan descargar libremente por cualquier usuario, y que además puedan ser linkados desde cualquier sitio. Pero en la mayoría de los casos tendremos almacenados nuestros archivos y no nos gustará que nadie nos enlace directamente y [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fillito.com/blog/wp-content/uploads/100014192753_v46777512_.gif"><img class="alignleft size-medium wp-image-265" style="border: 0pt none; margin: 5px;" title="Evitar Links Externos con Amazon S3" src="http://www.fillito.com/blog/wp-content/uploads/100014192753_v46777512_.gif" alt="" width="170" height="69" /></a>Si hemos elegido Amazon S3 como sistema de almacenamiento virtual , quizás nos interese tener almacenados archivos que se puedan descargar libremente por cualquier usuario, y que además puedan ser linkados desde cualquier sitio. Pero en la mayoría de los casos tendremos almacenados nuestros archivos y no nos gustará que nadie nos enlace directamente y tener que soportar los gastos de transferencia y almacenamiento por él.</p>
<p>Voy a explicar cómo, con un sencillo script en php conseguiremos que nuestros archivos de S3 estén totalmente protegidos y que sólo puedan ser accesibles desde nuestro dominio.</p>
<p>Lo primero de todo, es conocer dos características que Amazon nos prové con sus <a title="S3 API Docs : Acojonante que la última actualización sea del 03 de 2006" href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/">APIs</a>:<br />
- Los ACL (Access Control List) : que nos permite definir los permisos de lectura-escritura-ejecución de nuestros bucket y objetos.<br />
- Las URLs Firmadas : que nos permite acceder temporalmente a nuestros archivos protegidos, a través de una url que incluye una firma y un tiempo de expiración de los permisos. Éstas URLs las podremos generar con nuestro script, y llevarán como parámetro nuestra firma generada en tiempo de ejecución, que lleva implicita el tiempo de caducidad de la url.</p>
<p>La primera medida es aplicar permisos exclusivo de lectura para nuestro usuario (usando los ACLs) a todos los archivos que queramos proteger, para que sea imprescindible una validación al acceder a ellos.<br />
Para generar nuestro script , necesitaremos echar mano de la clase <a title="Crypt/HMAC" href="http://pear.php.net/package/Crypt_HMAC/download">Crypt/HMAC</a> para construir el hash en <a href="http://es.wikipedia.org/wiki/SHA">sha1</a> que Amazon S3 requiere.<br />
Lo primero será crear nuestra función para  generar nuestra <a title="S3 Authentication" href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/S3_Authentication.html">firma</a>:</p>
<div class="igBar"><span id="lphp-30"><a href="#" onclick="javascript:showPlainTxt('php-30'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-30">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">require_once</span> <span style="color:#FF0000;">'Crypt/HMAC.php'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> hex2b64<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$raw</span> = <span style="color:#FF0000;">''</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">for</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$i</span>=<span style="color:#CC66CC;color:#800000;">0</span>; <span style="color:#0000FF;">$i</span> &amp;lt;strlen<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#0000FF;">$i</span>+=<span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$raw</span> .= <a href="http://www.php.net/chr"><span style="color:#000066;">chr</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/hexdec"><span style="color:#000066;">hexdec</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/substr"><span style="color:#000066;">substr</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span>, <span style="color:#0000FF;">$i</span>, <span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">return</span> <a href="http://www.php.net/base64_encode"><span style="color:#000066;">base64_encode</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$raw</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> makeSig<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$secretKey</span>=<span style="color:#FF0000;">"Llave secreta que nos proporciona Amazon para nuestra cuenta"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$hasher</span> =&amp; <span style="color:#000000; font-weight:bold;">new</span> Crypt_HMAC<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$secretKey</span>, <span style="color:#FF0000;">"sha1"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$signature</span> = hex2b64<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$hasher</span>-&amp;gt;hash<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">return</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$signature</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Lo siguiente, será crearnos una función para construir nuestra URL firmada :</p>
<div class="igBar"><span id="lphp-31"><a href="#" onclick="javascript:showPlainTxt('php-31'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-31">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> getSignedURL<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$bucket</span>, <span style="color:#0000FF;">$key</span>, <span style="color:#0000FF;">$expires</span>=<span style="color:#CC66CC;color:#800000;">120</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$accessKeyId</span>=<span style="color:#FF0000;">"accessKeyId que nos proporciona Amazon con nuestra cuenta"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$expires</span> = <a href="http://www.php.net/time"><span style="color:#000066;">time</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color:#0000FF;">$expires</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$resource</span> = <span style="color:#0000FF;">$bucket</span>.<span style="color:#FF0000;">"/"</span>.<a href="http://www.php.net/urlencode"><span style="color:#000066;">urlencode</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$key</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$stringToSign</span> = <span style="color:#FF0000;">"GETnnn$expiresn/$resource"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$signature</span> = <a href="http://www.php.net/urlencode"><span style="color:#000066;">urlencode</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>makeSig<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$stringToSign</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$signedUrl</span>=<span style="color:#FF0000;">"http://s3.amazonaws.com/$resource?AWSAccessKeyId=$accessKeyId&amp;Expires=$expires&amp;Signature=$signature"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">return</span> <span style="color:#0000FF;">$signedUrl</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Ésta función nos devolverá la url firmada, que estará disponible durante el tiempo (en segundos) que hayamos establecido en el parametro $expires (120seg por defecto)</p>
<p>Ahora ya sólamente nos falta un script que nos lance al contenido, pero que nos proteja de links externos a nuestro dominio.<br />
Para ésto simplemente comprobaremos si existe el campo HTTP_REFERER en nuestra variable $_SERVER , que nos indicará que estamos accediendo a ésta url desde otra url de referencia , y que nuestro dominio (extraido desde $_SERVER['HTTP_HOST']) esté contenido en él.</p>
<div class="igBar"><span id="lphp-32"><a href="#" onclick="javascript:showPlainTxt('php-32'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-32">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> get_amazon_url<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$amazon_bucket</span>,<span style="color:#0000FF;">$amazon_object</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/isset"><span style="color:#000066;">isset</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$_SERVER</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'HTTP_REFERER'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> &amp;&amp; <a href="http://www.php.net/strstr"><span style="color:#000066;">strstr</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$_SERVER</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'HTTP_REFERER'</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#0000FF;">$_SERVER</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'HTTP_HOST'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>&nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$url</span>=getSignedURL<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$amazon_bucket</span>,<span style="color:#0000FF;">$amazon_object</span>,<span style="color:#CC66CC;color:#800000;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/header"><span style="color:#000066;">header</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'Location:'</span>.<span style="color:#0000FF;">$url</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#616100;">else</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Éste contenido ha sido enlazado ilegalmente'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Al llamar a ésta función, seremos automáticamente redirigidos al contenido en amazon siempre que el link provenga desde nuestro mismo dominio. Por supuesto, si quisieramos permitir el acceso desde una determinada lista de dominios, simplemente tendríamos que modificar un poco la condición if , para que compruebe que cada uno de los dominios están incluido en el HTTP_REFERER.</p>
<p>Espero que sea útil.<br />
Un Saludo !!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/evitar-links-externos-con-amazon-s3-09-2008/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Operadores &gt; en PHP (desplazamientos binarios)</title>
		<link>http://www.fillito.com/blog/operadores-en-php-desplazamientos-binarios-09-2008</link>
		<comments>http://www.fillito.com/blog/operadores-en-php-desplazamientos-binarios-09-2008#comments</comments>
		<pubDate>Wed, 10 Sep 2008 21:11:25 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[operadores aritméticos]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=271</guid>
		<description><![CDATA[Esta semana me he puesto ya en serio a prepararme para la certificación Zend de Ingeniero PHP. Entre el temario del primer capítulo, encontré dos operadores que jamás había usado y me llamaron mucho la atención porque ni siquiera los había visto usados en algún otro script php. Me sonaban de cuando había estudiado C [...]]]></description>
			<content:encoded><![CDATA[<p>Esta semana me he puesto ya en serio a prepararme para la certificación Zend de Ingeniero PHP.</p>
<p>Entre el temario del primer capítulo, encontré dos operadores que jamás había usado y me llamaron mucho la atención porque ni siquiera los había visto usados en algún otro script php. Me sonaban de cuando había estudiado C en la universidad, y efectivamente hacen lo mismo.</p>
<p>Los operadores "<strong>&lt;&lt;</strong>" y "<strong>&gt;&gt;</strong>" realizan un desplazamiento binario de n posiciones, hacia la izquierda o a la derecha respectivamente.</p>
<p>Para el que no sepa exáctamente qué es un desplazamiento binario, lo explico:</p>
<p>La representación binaria de 5 (decimal) es 101. Un desplazamiento binario nos sirve para desplazar, a la izquierda o a la derecha, sus dígitos.  Por lo que un desplazamiento binario de 2 posiciones sobre el numero 5 nos daría como resultado el binario 10100 (20 en decimal).<br />
Su uso puede ser bastante útil y extremadamente eficiente cuando queremos multiplicar un número por alguna potencia de dos, ya que, internamente, el desplazamiento binario será mucho más rápido y requerirá menos operaciones que la multiplicación.</p>
<p>Su sintaxis es muy sencilla, y como cualquier otro operador aritmético, su asociatividad de izquierda.</p>
<div class="igBar"><span id="lphp-34"><a href="#" onclick="javascript:showPlainTxt('php-34'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-34">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$a</span> &amp;lt;&amp;lt; n; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Donde n es el número de desplazamientos que queremos hacer hacia la izquierda.</p>
<p><strong>Nota adicional</strong>: si pretendemos usar el desplazamiento binario tenemos que tener cierto cuidado y conocimiento de las características técnicas de la máquina en la que estamos corriendo el script. Ya que si estamos utilizando una máquina de 32bits , los datos se almacenarán, como es lógico, en palabras de 32 bits, y si intentamos realizar un desplazamiento binario de 32 posiciones, obtendremos como resultado un estupendo overflow.<br />
Por lo que si queremos multiplicar por potencias de 2 , tened cuidado de cuántas posiciones desplazais, ya que a veces os convendrá más utilizar la función <strong>pow(</strong>n,m<strong>)</strong>;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/operadores-en-php-desplazamientos-binarios-09-2008/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chuletas Imprescindibles</title>
		<link>http://www.fillito.com/blog/chuletas-imprescindibles-09-2008</link>
		<comments>http://www.fillito.com/blog/chuletas-imprescindibles-09-2008#comments</comments>
		<pubDate>Sat, 06 Sep 2008 15:57:11 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[modrewrite]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=260</guid>
		<description><![CDATA[Esta semana, Raúl Jimenez me pasó una chuleta donde venía un resumen de elementos importantes para el SEO en una web. Esto me trajo recuerdos de una magnífica chuleta que había hecho Manz sobre PHP, así que me decidí a publicar un pequeño post con cuatro de las chuletas básicas para mí como desarrollador web. [...]]]></description>
			<content:encoded><![CDATA[<p>Esta semana, <a href="http://www.lanubederaulesverde.com">Raúl Jimenez</a> me pasó una chuleta donde venía un resumen de elementos importantes para el SEO en una web. Esto me trajo recuerdos de una magnífica chuleta que había hecho <a href="http://www.emezeta.com/">Manz</a> sobre PHP, así que me decidí a publicar un pequeño post con cuatro de las chuletas básicas para mí como desarrollador web. Cuatro guias de referencia para PHP, SEO, ModRewrite y CSS.<br />
Esta es mi lista ordenada según lo útiles que son para mí <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>- La primera es, cómo no, la magnífica  <a href="http://www.emezeta.com/articulos/emezeta-card-php-cheat-sheet">Emezeta Card PHP Cheatsheet (v0.2)</a><br />
- El segundo puesto es para <a href="http://anton.shevchuk.name/internet/seo-cheatsheet/">SEO Cheatsheet</a> , de Anton Shevchuk (el link al post está en ruso, pero la chuleta en inglés)<br />
- El tercer puesto es para <a href="http://www.emezeta.com/articulos/emezeta-card-modrewrite-cheat-sheet">Emezeta Card ModRewrite Cheatsheet (v0.1)</a><br />
- Y cuarto, pero no menos importante para <a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet/">CSS CheatShett (V2)</a> , de AddedBytes</p>
<p>Espero que os sean útiles !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/chuletas-imprescindibles-09-2008/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Atributos de una imágen en PHP</title>
		<link>http://www.fillito.com/blog/atributos-de-una-imagen-en-php-08-2005</link>
		<comments>http://www.fillito.com/blog/atributos-de-una-imagen-en-php-08-2005#comments</comments>
		<pubDate>Thu, 25 Aug 2005 23:08:51 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[funciones útiles]]></category>
		<category><![CDATA[imágenes]]></category>

		<guid isPermaLink="false">http://www.fillito.com/?p=6</guid>
		<description><![CDATA[Si alguno programa en PHP quizás se haya encontrado alguna vez en la situación de necesitar conocer algún atributo de una imagen (altura, anchura o extensión ...). A mí me ha ocurrido esta tarde, modificando cosillas en ésta página. Quería colocar una serie de imágenes y que éstas se redimensionaran para ajustarse aun espacio. Todo [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Si alguno programa en PHP quizás se haya encontrado alguna vez en la situación de necesitar conocer algún atributo de una imagen (altura, anchura o extensión ...).<br />
A mí me ha ocurrido esta tarde, modificando cosillas en ésta página. Quería colocar una serie de imágenes y que éstas se redimensionaran para ajustarse aun espacio. Todo iba bien si la imagen era de mayor o igual tamaño que el espacio, ya que al reducirla  no perdía calidad, pero si ésta era más pequeña, perdía calidad o se distorsionaba.<br />
Así que buscando un poco, para conseguir averiguar el tamaño de la imagen desde el código y así poder redimensionarla o no en cada caso, encontre la función <strong>getimagesize();</strong> de PHP, que además no depende de librerías como Imagemagik o GD.</p>
<p><strong>getimagesize( string ); </strong> lee una cadena con la ruta de la imagen, y devuelve un array en el que sus posiciónes corresponden a :<br />
[0] : ancho en pixeles de la imagen<br />
[1] : alto en pixeles de la imagen<br />
[2] : flag indicador de la extensión de la imagen {consultar el manual de PHP}<br />
[3] : string con los valores height y width , listos para usar en una etiqueta IMG de HTML</p>
<p>Una función muy util para todo webmaster.</p>
<p>Si quieres más información cosulta la <a href="http://es.php.net/function.getimagesize">documentación</a> de la función en el manual de PHP</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/atributos-de-una-imagen-en-php-08-2005/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

