<?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>PHPBSD.net &#187; Artículos</title>
	<atom:link href="http://www.phpbsd.net/categoria/articulos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpbsd.net</link>
	<description>Blogueando sobre PHP, BSD, SEO, AJAX, Seguridad, Rendimiento... y mucho más</description>
	<lastBuildDate>Thu, 07 Oct 2010 11:57:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WordPress con el FeedBurner de Google y su maldito proxy</title>
		<link>http://www.phpbsd.net/2009/04/10/wordpress-con-el-feedburner-de-google-y-su-maldito-proxy/</link>
		<comments>http://www.phpbsd.net/2009/04/10/wordpress-con-el-feedburner-de-google-y-su-maldito-proxy/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 19:51:23 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rewrite-engine]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/?p=169</guid>
		<description><![CDATA[Hace tiempo escribí un post acerca de como usar FeedBurner para los feeds de un WordPress que se ha quedado algo obsoleto debido a algunos cambios en WordPress respecto a la URL de los feeds y a la compra de FeedBurner por parte de Google.
Si todavía crees que usar FeedBurner es una buena idea (yo [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/28/usando-mod_rewrite-y-feedburner-para-las-feeds-de-un-blog-con-wordpress/' rel='bookmark' title='Permanent Link: Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress'>Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress</a></li><li><a href='http://www.phpbsd.net/2009/02/21/actualizar-un-wordpress-a-la-ultima-version/' rel='bookmark' title='Permanent Link: Actualizar un WordPress a la última versión'>Actualizar un WordPress a la última versión</a></li><li><a href='http://www.phpbsd.net/2007/06/07/internacionalizacion-de-temas-en-wordpress-usando-gettext/' rel='bookmark' title='Permanent Link: Internacionalización de temas en WordPress usando gettext'>Internacionalización de temas en WordPress usando gettext</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo escribí un post acerca de <a title="Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress en PHPBSD.net" href="http://www.phpbsd.net/2007/01/28/usando-mod_rewrite-y-feedburner-para-las-feeds-de-un-blog-con-wordpress/">como usar FeedBurner para los feeds de un WordPress</a> que se ha quedado algo obsoleto debido a algunos cambios en WordPress respecto a la URL de los feeds y a la compra de FeedBurner por parte de Google.</p>
<p>Si todavía crees que usar FeedBurner es una buena idea (yo nunca lo tuve claro) la forma más cómoda de configurarlo es <strong>modificando el archivo .htaccess</strong>, aunque también existen plugins específicos (por ejemplo el <a title="flagrantdisregard  &raquo; FD Feedburner Plugin for WordPress" target="_blank" href="http://flagrantdisregard.com/feedburner/">FD Feedburner Plugin</a>).</p>
<p>Se trata de añadir lo siguiente al .htaccess:</p>
<p><code>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteBase /<br />
RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]<br />
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]<br />
RewriteRule ^feed/(.*)$ http://feeds2.feedburner.com/xxxxxx [R,L]<br />
&lt;/IfModule&gt;</code></p>
<p>Con lo anterior conseguimos que nuestro WordPress únicamente genere el feed para FeedBurner y que el resto de clientes (navegadores, arañas, etc.) sean redirigidos a la URL de FeedBurner.</p>
<p>Teóricamente este es el mejor método para usar FeedBurner ya que <strong>seguimos difundiendo la URL del feed original</strong> y así siempre podemos dejar de usar este servicio sin muchos inconvenientes. El problema está en que al haber la redirección muchos usuarios siguen el enlace del feed con el navegador y se suscriben a la URL del feed de FeedBurner&#8230; o sea que con el tiempo acabaremos con lectores suscritos a ambas URLs.</p>
<p>El método alternativo es modificar el theme de WordPress, o usar algún plugin, para difundir directamente la URL del feed de FeedBurner.</p>
<h4>Proxy de Google</h4>
<p>Si teníamos una cuenta en FeedBurner y la hemos migrado a Google recientemente, a parte del engorroso cambio de la URL del feed, quizás hemos notado que ahora la URL que difunde tu feed para cada post pasa por un proxy de Google.</p>
<p>En principio esto ya sucedía antes y el cambio únicamente es que ahora en lugar de pasar por <em>feeds.feedburner.com</em> pasa por <em>feedproxy.google.com</em> (aunque en mi caso antes de migrar la cuenta a Google no pasaba por ningún proxy, tengo caché, lo puedo demostrar :)</p>
<p>En cualquier caso si queremos <strong>desactivar completamente el proxy de Google</strong> hemos de cambiar la configuración de nuestro feed en FeedBurner. Concretamente se trata de desactivar la opción &#8220;Item link clicks&#8221; de la sección &#8220;TotalStats&#8221; dentro de la pestaña &#8220;Analize&#8221;. Con esto seguiremos teniendo estadísticas de número de lectores e ítems vistos (información más que suficiente) pero difundiremos siempre la URL original de cada post, algo <strong>muy recomendable para SEO</strong> (como bien <a title="Feedburner y permalinks &#8220;robadores&#8221; de posicionamiento | SigT" target="_blank" href="http://sigt.net/archivo/feedburner-y-permalinks-robadores-de-posicionamiento.xhtml">nos explicaba Armonth</a> hace tiempo).</p>
<p>Así es como debería quedar la configuración en FeedBurner:</p>
<p><img src="http://www.phpbsd.net/wp-content/images/snapshot_feedburner.jpg" alt="FeedBurner snapshot" /></p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/28/usando-mod_rewrite-y-feedburner-para-las-feeds-de-un-blog-con-wordpress/' rel='bookmark' title='Permanent Link: Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress'>Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress</a></li><li><a href='http://www.phpbsd.net/2009/02/21/actualizar-un-wordpress-a-la-ultima-version/' rel='bookmark' title='Permanent Link: Actualizar un WordPress a la última versión'>Actualizar un WordPress a la última versión</a></li><li><a href='http://www.phpbsd.net/2007/06/07/internacionalizacion-de-temas-en-wordpress-usando-gettext/' rel='bookmark' title='Permanent Link: Internacionalización de temas en WordPress usando gettext'>Internacionalización de temas en WordPress usando gettext</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2009/04/10/wordpress-con-el-feedburner-de-google-y-su-maldito-proxy/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Interesantes usos y alternativas de __toString() en PHP 5.x</title>
		<link>http://www.phpbsd.net/2009/04/02/interesantes-usos-y-alternativas-de-__tostring-en-php-5x/</link>
		<comments>http://www.phpbsd.net/2009/04/02/interesantes-usos-y-alternativas-de-__tostring-en-php-5x/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 23:50:19 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[tostring]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/?p=143</guid>
		<description><![CDATA[Desde la llegada de PHP 5.0 disponemos de varios métodos mágicos para nuestras clases PHP, entre ellos tenemos __toString() que nos permite codificar cómo queremos que se comporte una clase cuando una instancia de ella se convierte a un string.
Aunque a simple vista el método __toString() pueda parecer poco importante en PHP éste toma mucha [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/13/un-error-handler-que-lance-exceptions-en-php/' rel='bookmark' title='Permanent Link: Un error handler que lance exceptions en PHP'>Un error handler que lance exceptions en PHP</a></li><li><a href='http://www.phpbsd.net/2007/01/11/urls-limpias-y-amigables-con-php-y-apache/' rel='bookmark' title='Permanent Link: URLs limpias y amigables con PHP y Apache'>URLs limpias y amigables con PHP y Apache</a></li><li><a href='http://www.phpbsd.net/2007/04/25/carga-automatica-de-clases-en-php-con-autoload/' rel='bookmark' title='Permanent Link: Carga automática de clases en PHP con autoload'>Carga automática de clases en PHP con autoload</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Desde la llegada de PHP 5.0 disponemos de varios <strong>métodos mágicos</strong> para nuestras clases PHP, entre ellos tenemos <a target="_blank" title="PHP: Magic Methods - Manual" href="http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.tostring">__toString()</a> que nos permite codificar cómo queremos que se comporte una clase cuando una instancia de ella se convierte a un string.</p>
<p>Aunque a simple vista el método <em>__toString()</em> pueda parecer poco importante en PHP éste toma mucha relevancia si trabajamos con <a target="_blank" title="symfony | Web PHP Framework" href="http://www.symfony-project.org/">symfony</a> o algún otro <strong>framework orientado a objetos</strong> donde la información de la base datos se encuentra mapeada en un modelo de objetos.</p>
<p>A pesar de que <em>__toString()</em> está disponible desde la versión 5.0.0 del PHP en mi opinión <strong>no empieza a ser realmente útil hasta la versión 5.2.0</strong>, algo que en el <a target="_blank" title="PHP: PHP 5 ChangeLog" href="http://www.php.net/ChangeLog-5.php#5.2.0">changelog del PHP</a> reflejaron con un tímido:</p>
<blockquote><p>Changed __toString() to be called wherever applicable. (Marcus)</p></blockquote>
<p>Hasta entonces <em>__toString()</em> sólo se llamaba cuando se usaba <em>echo()</em> o <em>print()</em> lo que limitaba mucho su funcionalidad. Desde la versión 5.2.0 <em>__toString()</em> se llama siempre que tratemos a un objeto como a un string.</p>
<p>Por ejemplo dada la siguiente definición de clase:</p>
<div class="syntax_hilite">
<div id="php-6">
<div class="php"><span style="color:#000000; font-weight:bold;">class</span> User extends BaseUser<br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; public <span style="color:#000000; font-weight:bold;">function</span> __toString<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#616100;">return</span> <span style="color:#0000FF;">$this</span>-&gt;<span style="color:#006600;">getName</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Hasta PHP 5.2.0 sólo podíamos invocar a <em>__toString()</em> con:</p>
<div class="syntax_hilite">
<div id="php-7">
<div class="php"><span style="color:#0000FF;">$user</span> = <span style="color:#000000; font-weight:bold;">new</span> User<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#0000FF;">$user</span>;<br />
<a href="http://www.php.net/print"><span style="color:#000066;">print</span></a> <span style="color:#0000FF;">$user</span>;</div>
</div>
</div>
<p></p>
<p>Desde la versión 5.2.0 podemos hacer varias cosas interesantes con <em>__toString()</em> sobretodo relacionadas con el manejo de arrays de objetos, algo muy frecuente en los frameworks que corren por ahí hoy en día.</p>
<p>Por ejemplo si obtenemos el típico array de objetos con symfony:</p>
<div class="syntax_hilite">
<div id="php-8">
<div class="php"><span style="color:#0000FF;">$users</span> = UserPeer::<span style="color:#006600;">doSelect</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#000000; font-weight:bold;">new</span> Criteria<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>Trabajando directamente con las funciones de PHP entre otras muchas cosas podemos:</p>
<ul>
<li>Ordenar el array de objetos con un simple <em>sort()</em></li>
<li>Eliminar objetos duplicados del array con un <em>array_unique()</em></li>
<li>Generar una lista separada por comas para la presentación con un <em>implode()</em></li>
<li>Buscar un objeto determinado dentro del array con <em>array_search()</em></li>
</ul>
<h4>Alternativas a __toString()</h4>
<p>Si no tenemos la suerte de trabajar con PHP 5.2.x, o si queremos poder trabajar con un método distinto de <em>__toString()</em> para determinadas operaciones con arrays de objetos, podemos usar un código parecido al que propongo a continuación:</p>
<div class="syntax_hilite">
<div id="php-9">
<div class="php"><span style="color:#000000; font-weight:bold;">class</span> objectTools<br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; protected <a href="http://www.php.net/static"><span style="color:#000066;">static</span></a> <span style="color:#000000; font-weight:bold;">function</span> getMethodValues<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#0000FF;">$items</span> = <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">foreach</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span> <span style="color:#616100;">as</span> <span style="color:#0000FF;">$key</span> =&gt; <span style="color:#0000FF;">$obj</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$items</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#0000FF;">$key</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#0000FF;">$obj</span>-&gt;<span style="color:#0000FF;">$method</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">return</span> <span style="color:#0000FF;">$items</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; protected <a href="http://www.php.net/static"><span style="color:#000066;">static</span></a> <span style="color:#000000; font-weight:bold;">function</span> getObjectList<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$items</span>, <span style="color:#0000FF;">$list</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#0000FF;">$ret</span> = <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">foreach</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$items</span> <span style="color:#616100;">as</span> <span style="color:#0000FF;">$key</span> =&gt; <span style="color:#0000FF;">$item</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$ret</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#0000FF;">$list</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#0000FF;">$key</span><span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">return</span> <span style="color:#0000FF;">$ret</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; public <a href="http://www.php.net/static"><span style="color:#000066;">static</span></a> <span style="color:#000000; font-weight:bold;">function</span> arraySortByMethod<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span>, <span style="color:#0000FF;">$sort</span>=<span style="color:#FF0000;">'desc'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#0000FF;">$items</span> = self::<span style="color:#006600;">getMethodValues</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <a href="http://www.php.net/asort"><span style="color:#000066;">asort</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$items</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$sort</span>==<span style="color:#FF0000;">'desc'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#616100;">return</span> <a href="http://www.php.net/array_values"><span style="color:#000066;">array_values</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/array_reverse"><span style="color:#000066;">array_reverse</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>self::<span style="color:#006600;">getObjectList</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$items</span>, <span style="color:#0000FF;">$list</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>;<br />
&nbsp; &nbsp; <span style="color:#616100;">return</span> self::<span style="color:#006600;">getObjectList</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$items</span>, <span style="color:#0000FF;">$list</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; public <a href="http://www.php.net/static"><span style="color:#000066;">static</span></a> <span style="color:#000000; font-weight:bold;">function</span> arrayUniqueByMethod<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#0000FF;">$items</span> = self::<span style="color:#006600;">getMethodValues</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">return</span> self::<span style="color:#006600;">getObjectList</span><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/array_unique"><span style="color:#000066;">array_unique</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$items</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#0000FF;">$list</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; public <a href="http://www.php.net/static"><span style="color:#000066;">static</span></a> <span style="color:#000000; font-weight:bold;">function</span> arrayImplodeByMethod<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span>, <span style="color:#0000FF;">$sep</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#0000FF;">$items</span> = self::<span style="color:#006600;">getMethodValues</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">return</span> <a href="http://www.php.net/implode"><span style="color:#000066;">implode</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$sep</span>, <span style="color:#0000FF;">$items</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; public <a href="http://www.php.net/static"><span style="color:#000066;">static</span></a> <span style="color:#000000; font-weight:bold;">function</span> arraySearchByMethod<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span>, <span style="color:#0000FF;">$needle</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#0000FF;">$items</span> = self::<span style="color:#006600;">getMethodValues</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$list</span>, <span style="color:#0000FF;">$method</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#616100;">return</span> <a href="http://www.php.net/array_search"><span style="color:#000066;">array_search</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$needle</span>, <span style="color:#0000FF;">$items</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Lo anterior es más una propuesta de código que algo decente para ser distribuido. Simplemente se trata de trabajar con un array temporal para almacenar los valores del método solicitado, correr la función PHP y, si es necesario, volver a construir el array de objetos.</p>
<p>Algunos ejemplos de uso:</p>
<div class="syntax_hilite">
<div id="php-10">
<div class="php"><span style="color:#0000FF;">$ordenados</span> = objectTools::<span style="color:#006600;">arraySortByMethod</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$users</span>, <span style="color:#FF0000;">'getName'</span>, <span style="color:#FF0000;">'asc'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$sin_duplicados</span> = objectTools::<span style="color:#006600;">arrayUniqueByMethod</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$users</span>, <span style="color:#FF0000;">'getName'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$pos</span> = objectTools::<span style="color:#006600;">arraySearchByMethod</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$users</span>, <span style="color:#FF0000;">'getName'</span>, <span style="color:#FF0000;">'oriol'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#FF9933; font-style:italic;">//y por último en una plantilla...</span><br />
<a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Usuarios: '</span> . objectTools::<span style="color:#006600;">arrayImplodeByMethod</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$users</span>, <span style="color:#FF0000;">'getName'</span>, <span style="color:#FF0000;">', '</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>Fácilmente se pueden añadir tantos métodos de tratamiento de arrays como se necesiten... o mucho mejor hacer un método que simplemente reciba como variable la función PHP a ejecutar. En mi caso de momento sólo necesito estos en concreto y también así los puedo controlar individualmente.</p>
<p>Aunque estos métodos de <strong>objectTools</strong> nacieron como "parche" rápido dado que no tenía PHP 5.2.x para un proyecto symfony, ahora, una vez solventando el problema con los servidores, los sigo encontrando útiles en múltiples situaciones. Por supuesto se ha de tener presente el poco rendimiento de este código frente a realizar queries a medida usando el objeto Criteria, pero si ya tenemos un array de objetos en memoria sí que será más óptimo trabajar con él en lugar de lanzar varias queries contra la base de datos.</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/13/un-error-handler-que-lance-exceptions-en-php/' rel='bookmark' title='Permanent Link: Un error handler que lance exceptions en PHP'>Un error handler que lance exceptions en PHP</a></li><li><a href='http://www.phpbsd.net/2007/01/11/urls-limpias-y-amigables-con-php-y-apache/' rel='bookmark' title='Permanent Link: URLs limpias y amigables con PHP y Apache'>URLs limpias y amigables con PHP y Apache</a></li><li><a href='http://www.phpbsd.net/2007/04/25/carga-automatica-de-clases-en-php-con-autoload/' rel='bookmark' title='Permanent Link: Carga automática de clases en PHP con autoload'>Carga automática de clases en PHP con autoload</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2009/04/02/interesantes-usos-y-alternativas-de-__tostring-en-php-5x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Administrar servidores web vía SSH sin contraseña</title>
		<link>http://www.phpbsd.net/2009/02/22/administrar-servidores-web-via-ssh-sin-contrasena/</link>
		<comments>http://www.phpbsd.net/2009/02/22/administrar-servidores-web-via-ssh-sin-contrasena/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 15:06:45 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/?p=113</guid>
		<description><![CDATA[Desde hace muchos años y por mucho que evolucione el desarrollo web e internet el SSH, al igual que el CVS/SVN, sigue siendo una de las herramientas más usada para administrar aplicaciones web y sus respectivos servidores.
Una de las funciones que para mi resulta más útil del SSH a parte de lo evidente que es [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/' rel='bookmark' title='Permanent Link: Instalar clases PEAR en un hosting compartido'>Instalar clases PEAR en un hosting compartido</a></li><li><a href='http://www.phpbsd.net/2007/09/07/hostgator-un-servicio-de-hosting-con-acceso-ssh-y-soporte-de-php5/' rel='bookmark' title='Permanent Link: HostGator, un servicio de hosting con acceso SSH y soporte de PHP5'>HostGator, un servicio de hosting con acceso SSH y soporte de PHP5</a></li><li><a href='http://www.phpbsd.net/2007/04/26/instalacion-del-apc-alternative-php-cache-sobre-freebsd/' rel='bookmark' title='Permanent Link: Instalación del APC (Alternative PHP Cache) sobre FreeBSD'>Instalación del APC (Alternative PHP Cache) sobre FreeBSD</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Desde hace muchos años y por mucho que evolucione el desarrollo web e internet el <a target="_blank" title="Secure Shell - Wikipedia, la enciclopedia libre" href="http://es.wikipedia.org/wiki/SSH">SSH</a>, al igual que el CVS/SVN, sigue siendo una de las herramientas más usada para administrar aplicaciones web y sus respectivos servidores.</p>
<p>Una de las funciones que para mi resulta más útil del SSH a parte de lo evidente que es poder iniciar sesión en nuestro servidor, es poder <strong>ejecutar comandos remotamente</strong> y así fácilmente poder escribir scripts (PHP y/o de shell) que interactúen entre máquinas. Por ejemplo para subir la última release de nuestra web a producción, borrar cachés de disco, reiniciar algún que otro Apache que se ha quedado tonto, etc.</p>
<p>Algo que resulta muy útil en estos casos es poder usar SSH entre distintas máquinas <strong>sin necesidad de ir introduciendo la contraseña</strong>. Para conseguirlo, y entendiendo bien el riesgo de seguridad que puede suponer, hemos de seguir los siguientes pasos:</p>
<p><strong>[1]</strong> Iniciamos sesión en el servidor A con el usuario que queremos dejar libre de contraseña y ejecutamos:</p>
<p><code>$ ssh-keygen -t rsa</code></p>
<p><strong>[2]</strong> Añadimos la clave publica generada (<em>.ssh/id_rsa.pub</em>) al archivo de claves aceptadas del servidor B, por ejemplo vía SCP:</p>
<p><code>$ scp .ssh/id_rsa.pub usuario@B:.ssh/authorized_keys</code></p>
<p>Se ha de tener en cuenta que el anterior comando sobreescribe el archivo y podemos tener más de una clave aceptada en <em>authorized_keys</em>.</p>
<p><strong>[3]</strong> <strong>Listos!</strong> Desde el servidor A ya podemos entrar en B sin contraseña. Si estamos logueados con el usuario correcto sólo será necesario ejecutar:</p>
<p><code>$ ssh B</code></p>
<p>Al programar en PHP por supuesto que siempre tienes la alternativa de realizarlo todo vía peticiones HTTP aunque para determinadas tareas y situaciones los scripts CLI son una gran alternativa (y los puedes hacer muy chulos usando <a target="_blank" title="PHP: Ncurses - Manual" href="http://es.php.net/ncurses">ncurses</a>).</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/' rel='bookmark' title='Permanent Link: Instalar clases PEAR en un hosting compartido'>Instalar clases PEAR en un hosting compartido</a></li><li><a href='http://www.phpbsd.net/2007/09/07/hostgator-un-servicio-de-hosting-con-acceso-ssh-y-soporte-de-php5/' rel='bookmark' title='Permanent Link: HostGator, un servicio de hosting con acceso SSH y soporte de PHP5'>HostGator, un servicio de hosting con acceso SSH y soporte de PHP5</a></li><li><a href='http://www.phpbsd.net/2007/04/26/instalacion-del-apc-alternative-php-cache-sobre-freebsd/' rel='bookmark' title='Permanent Link: Instalación del APC (Alternative PHP Cache) sobre FreeBSD'>Instalación del APC (Alternative PHP Cache) sobre FreeBSD</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2009/02/22/administrar-servidores-web-via-ssh-sin-contrasena/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Actualizar un WordPress a la última versión</title>
		<link>http://www.phpbsd.net/2009/02/21/actualizar-un-wordpress-a-la-ultima-version/</link>
		<comments>http://www.phpbsd.net/2009/02/21/actualizar-un-wordpress-a-la-ultima-version/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 14:26:57 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/?p=99</guid>
		<description><![CDATA[Es un procedimiento muy sencillo que está perfectamente detallado en la documentación de WordPress aunque quizás faltan un par de puntos por explicar un poco mejor.
Si nuestra intención es hacer borrón y cuenta nueva con nuestro blog eliminando todos los archivos pero conservando la base de datos los pasos a seguir son los siguientes:
[1] Como [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/07/internacionalizacion-de-temas-en-wordpress-usando-gettext/' rel='bookmark' title='Permanent Link: Internacionalización de temas en WordPress usando gettext'>Internacionalización de temas en WordPress usando gettext</a></li><li><a href='http://www.phpbsd.net/2007/10/09/titulos-un-poco-mas-seo-y-en-espanol-para-wordpress/' rel='bookmark' title='Permanent Link: Títulos un poco más SEO y en español para WordPress'>Títulos un poco más SEO y en español para WordPress</a></li><li><a href='http://www.phpbsd.net/2009/04/10/wordpress-con-el-feedburner-de-google-y-su-maldito-proxy/' rel='bookmark' title='Permanent Link: WordPress con el FeedBurner de Google y su maldito proxy'>WordPress con el FeedBurner de Google y su maldito proxy</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Es un procedimiento muy sencillo que está perfectamente detallado en la <a target="_blank" title="Upgrading WordPress Extended &laquo; WordPress Codex" href="http://codex.wordpress.org/Upgrading_WordPress_Extended">documentación de WordPress</a> aunque quizás faltan un par de puntos por explicar un poco mejor.</p>
<p>Si nuestra intención es hacer <strong>borrón y cuenta nueva con nuestro blog</strong> eliminando todos los archivos pero conservando la base de datos los pasos a seguir son los siguientes:</p>
<p><strong>[1]</strong> Como siempre antes de empezar cualquier tarea parecida <strong>backup de todo</strong>. Incluso es buena idea montar el blog entero en otro sitio para después poder comparar el viejo con el nuevo.</p>
<p><strong>[2]</strong> Desactivamos todos los plugins y seleccionamos el tema por defecto. Aunque en nuestro caso como tenemos intención de borrar todos los archivos el nuevo WordPress desactivará todo lo que no encuentre.</p>
<p><strong>[3]</strong> Borramos todos los archivos anteriores. Si tenemos el wordpress mezclado con otras cosas el comando en cuestión es algo como:</p>
<p><code>$ rm -rf index.php license.txt readme.html wp-* xmlrpc.php</code></p>
<p><strong>[4]</strong> Descomprimimos la última versión de WordPress en el mismo sitio donde teníamos la anterior.</p>
<p><strong>[5]</strong> Editamos el nuevo <em>wp-config.php</em> y añadimos los datos de conexión y nombre de la BD.</p>
<p><strong>[6]</strong> Comprobamos en qué codificación está trabajando nuestro WordPress. Por ejemplo con:</p>
<p><code>mysql> show create table wp_posts;</code></p>
<p>Nos fijamos en el CHARSET utilizado y definimos DB_CHARSET con el mismo valor. En el caso de ser "utf8" no tenemos que tocar nada pero si estamos con "latin1" es necesario indicarlo en <em>wp-config.php</em> con:</p>
<div class="syntax_hilite">
<div id="php-12">
<div class="php"><a href="http://www.php.net/define"><span style="color:#000066;">define</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'DB_CHARSET'</span>, <span style="color:#FF0000;">'latin1'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p><strong>[7]</strong> Iniciamos el programa de actualización apuntando el navegador a la URL habitual del dashborad (p.e. http://tublog.es/wp-admin/)</p>
<p><strong>[8]</strong> Automáticamente aparecerá un mensaje diciendo que debemos proceder con la actualización de la BD. Hacemos clic en "Siguiente" y cruzamos los dedos... si todo va bien te aparecerá algo como "Update successful".</p>
<p><strong>[9]</strong> WordPress casi actualizado!</p>
<p>Digo casi porque casi seguro vamos a necesitar realizar alguno de lo siguientes pasos adicionales:</p>
<ul>
<li>Si habíamos subido archivos al WordPress utilizando su dashboard hemos de copiar la anterior carpeta <em>wp-content/uploads</em> a la nueva instalación.</li>
<li>Si trabajábamos con algún plugin para los tags debemos lanzar la importación manualmente desde el dashboard, por ejemplo en el caso del UTW desde "Herramientas" -> "Importar" -> "Ultimate Tag Warrior".</li>
<li>Si ha pasado mucho tiempo desde la última actualización no es mala idea repasarse las opciones de configuración de WordPress y comprobar que todo está ok, especialmente la sección de Permalinks.</li>
<li>Como hemos empezado de nuevo en lo que a código PHP se refiere es necesario volver a instalar los plugins que echemos en falta y un tema que nos guste. Por supuesto descargando las últimas versiones de todo y no aprovechando nada del anterior WP para así sacar el máximo partido de las nuevas funcionalidades (en parte uno de los objetivos del procedimiento descrito en este post).</li>
</ul>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/07/internacionalizacion-de-temas-en-wordpress-usando-gettext/' rel='bookmark' title='Permanent Link: Internacionalización de temas en WordPress usando gettext'>Internacionalización de temas en WordPress usando gettext</a></li><li><a href='http://www.phpbsd.net/2007/10/09/titulos-un-poco-mas-seo-y-en-espanol-para-wordpress/' rel='bookmark' title='Permanent Link: Títulos un poco más SEO y en español para WordPress'>Títulos un poco más SEO y en español para WordPress</a></li><li><a href='http://www.phpbsd.net/2009/04/10/wordpress-con-el-feedburner-de-google-y-su-maldito-proxy/' rel='bookmark' title='Permanent Link: WordPress con el FeedBurner de Google y su maldito proxy'>WordPress con el FeedBurner de Google y su maldito proxy</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2009/02/21/actualizar-un-wordpress-a-la-ultima-version/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTML Purifier, evita los ataques XSS y valida tu HTML</title>
		<link>http://www.phpbsd.net/2008/01/29/html-purifier-evita-los-ataques-xss-y-valida-tu-html/</link>
		<comments>http://www.phpbsd.net/2008/01/29/html-purifier-evita-los-ataques-xss-y-valida-tu-html/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 18:11:45 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[htmlpurifier]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2008/01/29/html-purifier-evita-los-ataques-xss-y-valida-tu-html/</guid>
		<description><![CDATA[HTML Purifier es una librería para filtrar HTML escrita en PHP que permite eliminar el código malicioso (XSS) a la vez que comprueba que el HTML valide contra el estándar correspondiente.
Una de las principales diferencias de HTML Purifier comparada con otras librerías de filtrado HTML es que descompone por completo el HTML y verifica que [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/14/capturando-los-fatal-errors-del-php-con-nuestro-handler/' rel='bookmark' title='Permanent Link: Capturando los fatal errors del PHP con nuestro handler'>Capturando los fatal errors del PHP con nuestro handler</a></li><li><a href='http://www.phpbsd.net/2007/02/11/el-mes-de-los-bugs-y-nueva-version-de-php/' rel='bookmark' title='Permanent Link: El mes de los bugs y nueva versión de PHP'>El mes de los bugs y nueva versión de PHP</a></li><li><a href='http://www.phpbsd.net/2007/01/31/transfiriendo-datos-con-la-libreria-curl-en-php/' rel='bookmark' title='Permanent Link: Transfiriendo datos con la librería cURL en PHP'>Transfiriendo datos con la librería cURL en PHP</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://htmlpurifier.org/" title="HTML Purifier - Filter your HTML the standards-compliant way!">HTML Purifier</a> es una librería para filtrar HTML escrita en PHP que permite <strong>eliminar el código malicioso</strong> (<a target="_blank" href="http://es.wikipedia.org/wiki/XSS" title="XSS - Wikipedia, la enciclopedia libre">XSS</a>) a la vez que comprueba que el <strong>HTML valide contra el estándar correspondiente</strong>.</p>
<p>Una de las principales diferencias de HTML Purifier comparada con otras librerías de filtrado HTML es que <strong>descompone por completo el HTML</strong> y verifica que cada uno de los elementos se encuentre dentro de una whitelist de elementos permitidos en lugar de limitarse a buscar elementos prohibidos en una blacklist (normalmente desfasada). A la vez que elimina el código no deseado también hace algo poco común en librerías de este tipo, valida que el HTML cumpla el estándar correspondiente y si no lo cumple realiza las modificaciones necesarias para corregirlo.</p>
<p>Puedes usar HTML Purifier tanto para filtrar datos de entrada, en el caso de que sea posible recibir código HTML, como el HTML de salida de tu aplicación. Lo más frecuente es usarla para filtrar datos de entrada como comentarios, emails, el resultado de algunos editores WYSIWYG, etc.</p>
<p>Se ha de tener presente que dado su funcionamiento interno <strong>es una librería muy potente pero pesada y lenta</strong>, no es para nada recomendable filtrar la salida de tu aplicación cada vez que generas código HTML. Mucho mejor filtrar la entrada y asegurar que el contenido de tu sistema está limpio. En todo caso para filtrar la salida se convierte en algo obligatorio trabajar con algún sistema de cache (<a href="http://www.phpbsd.net/2007/05/16/cache-de-paginas-estaticas-para-php/" title="Cache de páginas estáticas para PHP en PHPBSD.net">generar páginas estáticas</a>, un <a target="_blank" href="http://en.wikipedia.org/wiki/Reverse_proxy" title="Reverse proxy - Wikipedia, the free encyclopedia">reverse proxy</a>, en BD capturando el output-buffer, etc.)</p>
<p>A continuación explico brevemente su instalación y uso.</p>
<h4>Instalación</h4>
<p><strong>[1]</strong> Descargar el archivo <a target="_blank" href="http://htmlpurifier.org/releases/htmlpurifier-3.0.0.tar.gz" title="htmlpurifier-3.0.0.tar.gz">htmlpurifier-3.0.0.tar.gz</a> y descomprimirlo en el servidor. No es necesario que esté accesible para los usuarios, puedes colocarlo fuera del <em>DocumentRoot</em>. Ten en cuenta que la última versión (la 3.0) sólo es compatible con PHP5.</p>
<p><strong>[2]</strong> Poner los permisos adecuados a los directorios que HTML Purifier usará para cachear algunos archivos. Los directorios en cuestión son <em>DefinitionCache/Serializer</em> y todos sus subdirectorios. Si tenemos acceso por shell al servidor lo solucionamos con un:</p>
<p><code>chmod -R 0777 HTMLPurifier/DefinitionCache/Serializer</code></p>
<p>Utiliza 0777 o 0775 según convenga, el objetivo es permitir al servidor web escribir en estos directorios.</p>
<p><strong>[3]</strong> Es necesario tener instalada la extensión <a target="_blank" href="http://es2.php.net/manual/es/ref.iconv.php" title="PHP: iconv - Manual">iconv</a> si quieres trabajar con un enconding distinto de UTF-8 y si quieres una salida más bonita del HTML también es necesaria la extensión <a target="_blank" href="http://es2.php.net/manual/es/ref.tidy.php" title="PHP: tidy - Manual">tidy</a>.</p>
<p><strong>[4]</strong> Para mayor comodidad puedes incluir el directorio de la HTML Purifier en tu <em>include_path</em> a pesar de que es recomendable sólo hacer <em>require()</em> cuando vayas a usarla, es una librería bastante grande.</p>
<h4>Usando la librería</h4>
<div class="syntax_hilite">
<div id="php-14">
<div class="php"><span style="color:#0000FF;">$dirty_html</span> = <span style="color:#FF0000;">'&lt;strong&gt;prueba'</span>;<br />
<span style="color:#616100;">require_once</span> <span style="color:#FF0000;">'/directorio_de_htmlpurifier/library/HTMLPurifier.auto.php'</span>;<br />
<span style="color:#FF9933; font-style:italic;">//require_once 'HTMLPurifier.php';</span><br />
<span style="color:#0000FF;">$config</span> = HTMLPurifier_Config::<span style="color:#006600;">createDefault</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$config</span>-&gt;<span style="color:#006600;">set</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'Core'</span>, <span style="color:#FF0000;">'Encoding'</span>, <span style="color:#FF0000;">'ISO-8859-1'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$config</span>-&gt;<span style="color:#006600;">set</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'HTML'</span>, <span style="color:#FF0000;">'Doctype'</span>, <span style="color:#FF0000;">'HTML 4.01 Transitional'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$purifier</span> = <span style="color:#000000; font-weight:bold;">new</span> HTMLPurifier<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$config</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$clean_html</span> = <span style="color:#0000FF;">$purifier</span>-&gt;<span style="color:#006600;">purify</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$dirty_html</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#0000FF;">$clean_html</span>;</div>
</div>
</div>
<p></p>
<p>En el ejemplo se incluye el archivo <em>HTMLPurifier.auto.php</em> indicando la ruta completa, si has añadido el directorio de la librería en tu <em>include_path</em> puedes incluir <em>HTMLPurifier.php</em> directamente (usa la línea comentada).</p>
<p>En este ejemplo simple se está configurando HTML Purifier para que trabaje con 'HTML 4.01 Transitional' codificado en 'ISO-8859-1'. Por defecto la librería trabaja con 'XHTML 1.0 Transitional' en 'UTF-8', si este es el único tipo de documento y codificación que necesitas puedes eliminar las llamadas a <em>set()</em> y no es necesario crear el objeto <em>$config</em>. Existen muchos otros <a target="_blank" href="http://htmlpurifier.org/live/configdoc/plain.html" title="Configuration Documentation - HTML Purifier">parámetros de configuración</a> que se merecen una ojeada aunque para un funcionamiento normal no es necesario tocar casi nada.</p>
<p>También existen plugins para varios CMS conocidos para empezar a usar HTML Purifier de una forma todavía más fácil. Entre ellos está el plugin <a target="_blank" href="http://urbangiraffe.com/plugins/html-purified/" title="HTML Purified - Enhanced protection against XSS | Urban Giraffe">HTML Purified para WordPress</a> y el módulo <a target="_blank" href="http://drupal.org/project/htmlpurifier" title="HTML Purifier | drupal.org">HTML Purifier para Drupal</a>.</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/14/capturando-los-fatal-errors-del-php-con-nuestro-handler/' rel='bookmark' title='Permanent Link: Capturando los fatal errors del PHP con nuestro handler'>Capturando los fatal errors del PHP con nuestro handler</a></li><li><a href='http://www.phpbsd.net/2007/02/11/el-mes-de-los-bugs-y-nueva-version-de-php/' rel='bookmark' title='Permanent Link: El mes de los bugs y nueva versión de PHP'>El mes de los bugs y nueva versión de PHP</a></li><li><a href='http://www.phpbsd.net/2007/01/31/transfiriendo-datos-con-la-libreria-curl-en-php/' rel='bookmark' title='Permanent Link: Transfiriendo datos con la librería cURL en PHP'>Transfiriendo datos con la librería cURL en PHP</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2008/01/29/html-purifier-evita-los-ataques-xss-y-valida-tu-html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MediaWiki con URLs cortas usando mod_rewrite</title>
		<link>http://www.phpbsd.net/2007/12/04/mediawiki-con-urls-cortas-usando-mod_rewrite/</link>
		<comments>http://www.phpbsd.net/2007/12/04/mediawiki-con-urls-cortas-usando-mod_rewrite/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 19:51:28 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[rewrite-engine]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2007/12/04/mediawiki-con-urls-cortas-usando-mod_rewrite/</guid>
		<description><![CDATA[MediaWiki es, probablemente, el motor para wikis más conocido del mundo. Originalmente creado para la Wikipedia actualmente es usado por una gran cantidad de wikis que nada tienen que ver con dicha fundación. La instalación por defecto del MediaWiki configura unas URLs no muy apropiadas en los tiempos que corren (con scripts PHP visibles y [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/28/usando-mod_rewrite-y-feedburner-para-las-feeds-de-un-blog-con-wordpress/' rel='bookmark' title='Permanent Link: Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress'>Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress</a></li><li><a href='http://www.phpbsd.net/2007/01/11/urls-limpias-y-amigables-con-php-y-apache/' rel='bookmark' title='Permanent Link: URLs limpias y amigables con PHP y Apache'>URLs limpias y amigables con PHP y Apache</a></li><li><a href='http://www.phpbsd.net/2007/12/12/como-interactuar-con-google-desde-php-usando-zend-framework/' rel='bookmark' title='Permanent Link: Como interactuar con Google desde PHP usando Zend Framework'>Como interactuar con Google desde PHP usando Zend Framework</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.mediawiki.org/wiki/MediaWiki/es" title="MediaWiki/es - MediaWiki">MediaWiki</a> es, probablemente, el motor para wikis más conocido del mundo. Originalmente creado para la Wikipedia actualmente es usado por una gran cantidad de wikis que nada tienen que ver con dicha fundación. La instalación por defecto del MediaWiki <strong>configura unas URLs no muy apropiadas</strong> en los tiempos que corren (con scripts PHP visibles y parámetros por GET) pero que tienen la ventaja de funcionar correctamente en un mayor número de servidores. Si dispones de <a href="http://www.phpbsd.net/tag/rewrite-engine/" title="Archivo de etiquetas de rewrite-engine en PHPBSD.net">mod_rewrite</a> a continuación describo una forma de <strong>hacer estas URLs un poco más "bonitas" y cortas</strong>.</p>
<p>Acerca de este tema existe mucha documentación y en el <a target="_blank" href="http://www.mediawiki.org/wiki/Manual:Short_URL" title="Manual:Short URL - MediaWiki">apartado correspondiente del manual</a> puedes encontrar varias alternativas. Después de haber trabajado con varias wikis en estos últimos años la que encuentro mejor es la siguiente.</p>
<h4>Modificar LocalSettings.php</h4>
<p>Se debe sustituir el valor de la variable <em>$wgArticlePath</em> por:</p>
<div class="syntax_hilite">
<div id="php-16">
<div class="php"><span style="color:#0000FF;">$wgArticlePath</span>&nbsp; &nbsp; &nbsp; = <span style="color:#FF0000;">"/$1"</span>;</div>
</div>
</div>
<p></p>
<p>y si no tienes definida esta variable se debe añadir en un lugar cercano a la definición de <em>$wgScriptPath</em>.</p>
<h4>Modificar .htaccess</h4>
<p>Añadir las siguientes lineas a tu <em>.htaccess</em>:</p>
<p><code>RewriteEngine On<br />
RewriteBase /<br />
RewriteRule ^$ http://www.ejemplo.com/Portada [R=301,L]<br />
RewriteRule ^[^:]*\. - [L]<br />
RewriteRule ^[^:]*\/ - [L]<br />
RewriteRule ^(.+)$ /mediawiki/index.php?title=$1 [L,QSA]</code></p>
<p>Las URLs resultantes tienen la forma:</p>
<p><em>http://www.ejemplo.com/Portada</em> para la Home.<br />
<em>http://www.ejemplo.com/Prueba</em> para una página llamada "Prueba".</p>
<h4>Consideraciones</h4>
<p>Este método funciona correctamente en distintos escenarios aunque se han de tener en cuenta algunas consideraciones:</p>
<p><strong>[1]</strong> La wiki debe estar instalada en el directorio "mediawiki". Si la tienes en otro directorio sustituye "mediawiki" por el nombre apropiado en las anteriores reglas de mod_rewrite.</p>
<p><strong>[2]</strong> Si alguien accede a la raíz del dominio es redirigido a "/Portada" con una redirección permanente (301).</p>
<p><strong>[3]</strong> Si el nombre de tu wiki contiene un punto (p.e. Ejemplo.com) fallarán los accesos a algunas páginas especiales. Para forzar que las páginas especiales que usan el nombre de la wiki en la URL se procesen correctamente es necesario añadir la siguiente regla justo después de la redirección a la Portada:</p>
<p><code>RewriteRule ^Ejemplo\.com(.+)$ /mediawiki/index.php?title=Ejemplo.com$1 [L,QSA]</code></p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/28/usando-mod_rewrite-y-feedburner-para-las-feeds-de-un-blog-con-wordpress/' rel='bookmark' title='Permanent Link: Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress'>Usando mod_rewrite y FeedBurner para las feeds de un blog con WordPress</a></li><li><a href='http://www.phpbsd.net/2007/01/11/urls-limpias-y-amigables-con-php-y-apache/' rel='bookmark' title='Permanent Link: URLs limpias y amigables con PHP y Apache'>URLs limpias y amigables con PHP y Apache</a></li><li><a href='http://www.phpbsd.net/2007/12/12/como-interactuar-con-google-desde-php-usando-zend-framework/' rel='bookmark' title='Permanent Link: Como interactuar con Google desde PHP usando Zend Framework'>Como interactuar con Google desde PHP usando Zend Framework</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2007/12/04/mediawiki-con-urls-cortas-usando-mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>URL con o sin WWW, esa es la cuestión</title>
		<link>http://www.phpbsd.net/2007/11/05/url-con-o-sin-www-esa-es-la-cuestion/</link>
		<comments>http://www.phpbsd.net/2007/11/05/url-con-o-sin-www-esa-es-la-cuestion/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 19:41:15 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[no-www]]></category>
		<category><![CDATA[rewrite-engine]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[yes-www]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2007/11/05/url-con-o-sin-www-esa-es-la-cuestion/</guid>
		<description><![CDATA[Desde el nacimiento de la World Wide Web existe la costumbre de usar el subdominio "www" para las direcciones URL cuando en realidad, y siguiendo la definición oficial de la WWW, no es para nada necesario. Todos los navegadores web existentes asumen el protocolo HTTP y añaden "http://" automáticamente a las URL, ¿porque entonces muchos [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/11/urls-limpias-y-amigables-con-php-y-apache/' rel='bookmark' title='Permanent Link: URLs limpias y amigables con PHP y Apache'>URLs limpias y amigables con PHP y Apache</a></li><li><a href='http://www.phpbsd.net/2007/12/04/mediawiki-con-urls-cortas-usando-mod_rewrite/' rel='bookmark' title='Permanent Link: MediaWiki con URLs cortas usando mod_rewrite'>MediaWiki con URLs cortas usando mod_rewrite</a></li><li><a href='http://www.phpbsd.net/2009/02/22/administrar-servidores-web-via-ssh-sin-contrasena/' rel='bookmark' title='Permanent Link: Administrar servidores web vía SSH sin contraseña'>Administrar servidores web vía SSH sin contraseña</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Desde el nacimiento de la World Wide Web existe la costumbre de <strong>usar el subdominio "www"</strong> para las direcciones URL cuando en realidad, y siguiendo la definición oficial de la WWW, <strong>no es para nada necesario</strong>. Todos los navegadores web existentes asumen el protocolo HTTP y añaden "http://" automáticamente a las URL, ¿porque entonces muchos servidores siguen necesitando el uso del subdominio "www" para servir la web?</p>
<p>Actualmente podríamos decir que es una <strong>cuestión de gustos</strong> usar o no la WWW para nuestras URL, te encuentras con partidarios del NO, como la iniciativa <a target="_blank" href="http://no-www.org/" title="www. is deprecated">no-www.org</a>, y otros que exponen interesantes motivos de porque SÍ, como en <a target="_blank" href="http://www.hm2k.com/articles/yes-www" title="HM2K &raquo; www. is NOT deprecated">HM2K</a>.</p>
<p>Lo que sí es recomendable para <a href="http://www.phpbsd.net/tag/seo/" title="Archivo de etiquetas de seo en PHPBSD.net">SEO</a>, y en mi opinión también para temas de Marketing, es decidirse por con o sin WWW y <strong>sólo usar un formato de URL</strong>. Siempre deberíamos difundir nuestra URL de la misma forma: en los enlaces de nuestra web, en enlaces de otras webs (las que podamos controlar), en anuncios en prensa e inet, etc. También se debería redirigir el tráfico que llega por el formato no deseado al bueno.</p>
<p>El comportamiento por defecto de muchos servidores de servir el mismo contenido en una URL con o sin WWW sin usar ninguna redirección es un error para SEO ya que crea <strong>contenido duplicado</strong>. Lo usual es que los buscadores interpreten las URL con o sin WWW como sitios web distintos.</p>
<p>Personalmente también encuentro importante la unificación del formato de las URL de cara a la comunicación, imagen de marca, difusión de contenidos, etc. Normalmente uno de nuestros objetivos es que los usuarios recuerden nuestra URL, ahora hablar con WWW ahora sin, no ayuda, a parte de la imagen que transmite.</p>
<p>Si por ejemplo decidimos que nuestras URL llevan WWW (como yo en este blog) podemos redirigir todo el tráfico que llega a URLs sin WWW con un <em>.htaccess</em> como:</p>
<p><code>RewriteEngine On<br />
RewriteBase /<br />
RewriteCond %{HTTP_HOST} ^phpbsd\.net$ [NC]<br />
RewriteRule ^(.*)$ http://www.phpbsd.net/$1 [R=301,L]</code></p>
<p>Como complemento a la redirección Google también nos permite indicar nuestra preferencia en las Webmaster Tools.</p>
<p><strong>Mis conclusiones:</strong></p>
<ul>
<li>Imprescindible la unificación a un formato determinado (con o sin WWW) vía redirección tanto para SEO como para Marketing.</li>
<li>Normalmente siempre sin WWW a excepción de si se trata de una web dirigida a un público no muy técnico y más aún si pretendemos hacer campañas de publicidad en medios convencionales (tv, prensa, etc.), en estos casos encuentro mejor usar la WWW para indicar claramente que nos estamos refiriendo a una URL. Quizás si usamos TLDs comunes (.com, .net, .org y en nuestro caso .es) cada día es menos necesario, si usamos cualquier otro encuentro muy recomendable usar la WWW.</li>
</ul>
<p><strong>¿y tú de quién eres? ¿con o sin?</strong></p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/01/11/urls-limpias-y-amigables-con-php-y-apache/' rel='bookmark' title='Permanent Link: URLs limpias y amigables con PHP y Apache'>URLs limpias y amigables con PHP y Apache</a></li><li><a href='http://www.phpbsd.net/2007/12/04/mediawiki-con-urls-cortas-usando-mod_rewrite/' rel='bookmark' title='Permanent Link: MediaWiki con URLs cortas usando mod_rewrite'>MediaWiki con URLs cortas usando mod_rewrite</a></li><li><a href='http://www.phpbsd.net/2009/02/22/administrar-servidores-web-via-ssh-sin-contrasena/' rel='bookmark' title='Permanent Link: Administrar servidores web vía SSH sin contraseña'>Administrar servidores web vía SSH sin contraseña</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2007/11/05/url-con-o-sin-www-esa-es-la-cuestion/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Títulos un poco más SEO y en español para WordPress</title>
		<link>http://www.phpbsd.net/2007/10/09/titulos-un-poco-mas-seo-y-en-espanol-para-wordpress/</link>
		<comments>http://www.phpbsd.net/2007/10/09/titulos-un-poco-mas-seo-y-en-espanol-para-wordpress/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 14:41:23 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[title-tags]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2007/10/09/titulos-un-poco-mas-seo-y-en-espanol-para-wordpress/</guid>
		<description><![CDATA[Los títulos de las páginas son uno de los factores más importantes de cara a la optimización de un sitio web para los buscadores (SEO). Si tenemos un blog con WordPress la responsabilidad de tener unos buenos títulos recae en el archivo header.php de nuestro tema. El tema por defecto de WordPress (Kubrick), y la [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/07/internacionalizacion-de-temas-en-wordpress-usando-gettext/' rel='bookmark' title='Permanent Link: Internacionalización de temas en WordPress usando gettext'>Internacionalización de temas en WordPress usando gettext</a></li><li><a href='http://www.phpbsd.net/2006/09/11/falta-poco-para-la-international-php-conference-2006/' rel='bookmark' title='Permanent Link: Falta poco para la International PHP Conference 2006'>Falta poco para la International PHP Conference 2006</a></li><li><a href='http://www.phpbsd.net/2006/10/31/un-poco-de-musica-para-freebsd/' rel='bookmark' title='Permanent Link: Un poco de música para FreeBSD'>Un poco de música para FreeBSD</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Los <strong>títulos de las páginas</strong> son uno de los factores más importantes de cara a la <strong>optimización de un sitio web para los buscadores</strong> (<a href="http://www.phpbsd.net/tag/seo/" title="Archivo de etiquetas de seo en PHPBSD.net">SEO</a>). Si tenemos un blog con WordPress la responsabilidad de tener unos buenos títulos recae en el archivo <em>header.php</em> de nuestro tema. El tema por defecto de WordPress (Kubrick), y la mayoría de themes que corren por ahí, generan unos títulos no muy buenos para el posicionamiento, a continuación describo una manera fácil de solucionar esto sin necesidad de ningún plugin.</p>
<p>Se trata de sustituir el código para los <strong>Title Tags</strong> que normalmente será algo parecido a esto:</p>
<div class="syntax_hilite">
<div id="php-20">
<div class="php">&lt;title&gt;&lt;?php bloginfo<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'name'</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#000000; font-weight:bold;">?&gt;</span> <span style="color:#000000; font-weight:bold;">&lt;?php</span> <span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> is_single<span style="color:#006600; font-weight:bold;">&#40;</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;">&#123;</span> <span style="color:#000000; font-weight:bold;">?&gt;</span> &amp;raquo; Blog Archive <span style="color:#000000; font-weight:bold;">&lt;?php</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#000000; font-weight:bold;">?&gt;</span> <span style="color:#000000; font-weight:bold;">&lt;?php</span> wp_title<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; ?&gt;&lt;/title&gt;</div>
</div>
</div>
<p></p>
<p>por esto si tenemos WordPress 2.3:</p>
<div class="syntax_hilite">
<div id="php-21">
<div class="php">&lt;title&gt;&lt;?php<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>is_archive<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Archivo de '</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>is_tag<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'etiquetas de '</span>;<br />
<a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <a href="http://www.php.net/trim"><span style="color:#000066;">trim</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>wp_title<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">''</span>,<span style="color:#000000; font-weight:bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>is_search<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Resultados de b&amp;uacute;squeda de '</span>.<span style="color:#0000FF;">$s</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> !<span style="color:#006600; font-weight:bold;">&#40;</span>is_404<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> and <span style="color:#006600; font-weight:bold;">&#40;</span>is_search<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span>is_single<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span>is_page<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span>is_tag<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span>is_archive<span style="color:#006600; font-weight:bold;">&#40;</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> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">' en '</span>;<br />
bloginfo<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'name'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> is_home<span style="color:#006600; font-weight:bold;">&#40;</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;">&#123;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">' &amp;raquo; '</span>; bloginfo<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'description'</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
?&gt;&lt;/title&gt;</div>
</div>
</div>
<p></p>
<p>o por esto si tenemos versiones anteriores:</p>
<div class="syntax_hilite">
<div id="php-22">
<div class="php">&lt;title&gt;&lt;?php<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>is_archive<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Archivo de '</span>;<br />
<a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <a href="http://www.php.net/trim"><span style="color:#000066;">trim</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>wp_title<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">''</span>,<span style="color:#000000; font-weight:bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color:#000066;">function_exists</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'is_tag'</span><span style="color:#006600; font-weight:bold;">&#41;</span> and is_tag<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Archivo de etiquetas de '</span>.<span style="color:#0000FF;">$tag</span>;<br />
<span style="color:#616100;">elseif</span> <span style="color:#006600; font-weight:bold;">&#40;</span>is_search<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Resultados de b&amp;uacute;squeda de '</span>.<span style="color:#0000FF;">$s</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> !<span style="color:#006600; font-weight:bold;">&#40;</span>is_404<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> and <span style="color:#006600; font-weight:bold;">&#40;</span>is_search<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span>is_single<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span>is_page<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color:#000066;">function_exists</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'is_tag'</span><span style="color:#006600; font-weight:bold;">&#41;</span> and is_tag<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> or <span style="color:#006600; font-weight:bold;">&#40;</span>is_archive<span style="color:#006600; font-weight:bold;">&#40;</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> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">' en '</span>;<br />
bloginfo<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'name'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> is_home<span style="color:#006600; font-weight:bold;">&#40;</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;">&#123;</span> <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">' &amp;raquo; '</span>; bloginfo<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'description'</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
?&gt;&lt;/title&gt;</div>
</div>
</div>
<p></p>
<p>Con esta modificación conseguimos los siguientes tipos de títulos:</p>
<ul>
<li>En la home: "<em>NOMBRE_DEL_BLOG</em> &raquo; <em>DESCRIPCIÓN_DEL_BLOG</em>"</li>
<li>En las categorías: "Archivo de <em>NOMBRE_CATEGORÍA</em> en <em>NOMBRE_DEL_BLOG</em>"</li>
<li>En las etiquetas: "Archivo de etiquetas de <em>NOMBRE_ETIQUETA</em> en <em>NOMBRE_DEL_BLOG</em>"</li>
<li>En los resultados de búsqueda: "Resultados de búsqueda de <em>TEXTO_BUSCADO</em> en <em>NOMBRE_DEL_BLOG</em>"</li>
<li>Para todos los posts y páginas: "<em>TÍTULO_ENTRADA</em> en <em>NOMBRE_DEL_BLOG</em>"</li>
</ul>
<p>Lo anterior está extraido del tema <a target="_blank" href="http://getk2.com/" title="K2">K2</a>, traducido al español y con algún retoque. Podría haber hecho un plugin, pero es tan sencillo y como igualmente sería necesario modificar el tema para llamar al plugin, que mira, modificas el tema y directamente introduces el código de lo que sería el plugin.</p>
<p>Si quieres tomarte más en serio la generación de los títulos o si eres perezoso existen plugins muy avanzados como <a target="_blank" href="http://www.netconcepts.com/seo-title-tag-plugin/" title="SEO Title Tag: A WordPress Plugin for SEO (Search Engine Optimization)">SEO Title Tag</a> y <a target="_blank" href="http://wp.uberdose.com/2007/03/24/all-in-one-seo-pack/" title="SEO for your Wordpress Blog">All in One SEO Pack</a>, este último también sirve para gestionar los <strong>Meta Tags</strong> "description" y "keywords" también muy importantes para SEO pero no tanto como los <strong>Title Tags</strong>.</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/07/internacionalizacion-de-temas-en-wordpress-usando-gettext/' rel='bookmark' title='Permanent Link: Internacionalización de temas en WordPress usando gettext'>Internacionalización de temas en WordPress usando gettext</a></li><li><a href='http://www.phpbsd.net/2006/09/11/falta-poco-para-la-international-php-conference-2006/' rel='bookmark' title='Permanent Link: Falta poco para la International PHP Conference 2006'>Falta poco para la International PHP Conference 2006</a></li><li><a href='http://www.phpbsd.net/2006/10/31/un-poco-de-musica-para-freebsd/' rel='bookmark' title='Permanent Link: Un poco de música para FreeBSD'>Un poco de música para FreeBSD</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2007/10/09/titulos-un-poco-mas-seo-y-en-espanol-para-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Jugando con del.icio.us desde PHP</title>
		<link>http://www.phpbsd.net/2007/06/18/jugando-con-delicious-desde-php/</link>
		<comments>http://www.phpbsd.net/2007/06/18/jugando-con-delicious-desde-php/#comments</comments>
		<pubDate>Mon, 18 Jun 2007 03:15:18 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[delicious-api]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[servicios-web]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2007/06/18/jugando-con-delicious-desde-php/</guid>
		<description><![CDATA[Del.icio.us, el archiconocido servicio de gestión de marcadores sociales, ofrece una API para poder desarrollar aplicaciones que utilicen sus servicios. Hace tiempo que vi aparecer la clase Services_Delicious en el repositorio de las PEAR pero hasta ahora no le había podido pegar un ojo, es una clase que implementa un cliente para los servicios web [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/02/09/leyendo-xml-desde-php-con-simplexml/' rel='bookmark' title='Permanent Link: Leyendo XML desde PHP con SimpleXML'>Leyendo XML desde PHP con SimpleXML</a></li><li><a href='http://www.phpbsd.net/2007/02/04/envio-de-emails-desde-php-usando-varios-metodos-pear-mail_mime-mail-y-error_log/' rel='bookmark' title='Permanent Link: Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)'>Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)</a></li><li><a href='http://www.phpbsd.net/2007/12/12/como-interactuar-con-google-desde-php-usando-zend-framework/' rel='bookmark' title='Permanent Link: Como interactuar con Google desde PHP usando Zend Framework'>Como interactuar con Google desde PHP usando Zend Framework</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://del.icio.us/" title="del.icio.us">Del.icio.us</a>, el archiconocido servicio de gestión de marcadores sociales, ofrece una <a target="_blank" href="http://del.icio.us/help/api/" title="del.icio.us/help/api">API</a> para poder desarrollar aplicaciones que utilicen sus servicios. Hace tiempo que vi aparecer la clase <a target="_blank" href="http://pear.php.net/package/Services_Delicious" title="PEAR :: Package :: Services_Delicious">Services_Delicious</a> en el repositorio de las PEAR pero hasta ahora no le había podido pegar un ojo, es una clase que implementa un cliente para los <strong>servicios web basados en REST</strong> de del.icio.us.</p>
<p>La <a target="_blank" href="http://es.wikipedia.org/wiki/Representational_State_Transfer" title="Representational State Transfer - Wikipedia, la enciclopedia libre">Transferencia de Estado Representacional</a> (Representational State Transfer) o <strong>REST</strong> describe una interfaz web simple utilizando peticiones HTTP y datos XML pero <strong>sin capas adicionales como SOAP</strong>, frecuentemente usadas en los servicios web. Precisamente el otro día estuve charlando con mi colega <a target="_blank" href="http://www.harecoded.com/" title="Harecoded">Manuel Aguilar</a> acerca de las ventajas de usar servicios REST en muchos escenarios frente a los clásicos servicios web basados en SOAP o basados en protocolos propios, tema que se trato en la pasada <a target="_blank" href="http://phpconference.com/" title="International PHP Conference">PHP Conference 2007 spring edition</a> celebrada en Stuttgart a la que <a target="_blank" href="http://www.harecoded.com/2007/06/04/obsolescencia/" title="Harecoded  &raquo; Blog Archive   &raquo; De conferencias con una Psion 5mx">Manuel asistió</a>.</p>
<p>Sin ánimo de entrar en más detalles de lo que es REST (puedes consultar la definición de la wikipedia que enlazo, está muy bien) vamos a ver como <strong>trabajar con del.icio.us desde PHP usando la clase Services_Delicious</strong>.</p>
<p>Services_Delicious es una clase todavía en fase beta que no implementa todo lo que nos ofrece el servicio web de del.icio.us, pero que ya permite hacer todas las operaciones básicas cómodamente, como guardar y borrar enlaces, listar los tags, cambiarles el nombre, etc. Son poco más de 400 lineas bastante bien escritas, aunque en PHP4, donde se utiliza <a target="_blank" href="http://pear.php.net/package/HTTP_Request" title="PEAR :: Package :: HTTP_Request">HTTP_Request</a> para realizar las peticiones HTTP y <a target="_blank" href="http://pear.php.net/package/XML_Serializer" title="PEAR :: Package :: XML_Serializer">XML_serializer</a> para trabajar con los datos XML.</p>
<p>A continuación describo como hacer una nube de tags de una cuenta determinada de del.icio.us y como guardar un nuevo enlace. Esto son sólo dos ejemplos de utilización de algunas de las funciones que nos proporciona Services_Delicious, puedes ver todas las funciones disponibles en el siguiente listado:</p>
<ol>
<li>getTags()</li>
<li>renameTag($old, $new)</li>
<li>getDates()</li>
<li>getPosts($tags, $date)</li>
<li>getRecentPosts($tags, $max)</li>
<li>getAllPosts()</li>
<li>addPost($url, $description, $extended, $tags, $date, $shared)</li>
<li>deletePost($url)</li>
</ol>
<h4>Instalación de Services_Delicious</h4>
<p>Asumiendo que tenemos las <a href="http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/" title="Instalar clases PEAR en un hosting compartido en PHPBSD.net">PEAR disponibles</a> lo primero que hemos de hacer es instalar la clase en cuestión:</p>
<p><code>$ pear install --onlyreqdeps Services_Delicious-beta</code></p>
<p>Si estamos trabajando con la versión estable de las PEAR, lo más habitual, será necesario añadir "-beta" al nombre del paquete o cambiar la variable de configuración <em>preferred_state</em>. La instalación con el frontend web de las PEAR es igualmente sencilla, lo único a tener en cuenta es que necesita el paquete XML_Serializer que no se instalará automáticamente si tenemos <em>preferred_state=stable</em> ya que también se encuentra en fase beta.</p>
<h4>Guardando un enlace en del.icio.us</h4>
<p>El código necesario para guardar un enlace es el siguiente:</p>
<div class="syntax_hilite">
<div id="php-25">
<div class="php"><span style="color:#616100;">require_once</span> <span style="color:#FF0000;">'Services/Delicious.php'</span>;<br />
<span style="color:#0000FF;">$username</span> = <span style="color:#FF0000;">'usuario'</span>;<br />
<span style="color:#0000FF;">$password</span> = <span style="color:#FF0000;">'contraseña'</span>;<br />
<span style="color:#0000FF;">$dlc</span> = <span style="color:#000000; font-weight:bold;">new</span> Services_Delicious<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$username</span>, <span style="color:#0000FF;">$password</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$enlace</span> = <span style="color:#FF0000;">'http://www.phpbsd.net/'</span>;<br />
<span style="color:#0000FF;">$titulo</span> = <span style="color:#FF0000;">'PHPBSD.net'</span>;<br />
<span style="color:#0000FF;">$desc</span> = <span style="color:#FF0000;">'Blog de programación PHP'</span>;<br />
<span style="color:#0000FF;">$tags</span> = <span style="color:#FF0000;">'php, programación, webdev'</span>;<br />
<span style="color:#0000FF;">$result</span> = <span style="color:#0000FF;">$dlc</span>-&gt;<span style="color:#006600;">addPost</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$enlace</span>, <span style="color:#0000FF;">$titulo</span>, <span style="color:#0000FF;">$desc</span>, <span style="color:#0000FF;">$tags</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>PEAR::<span style="color:#006600;">isError</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$result</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;">&#123;</span><br />
&nbsp; <a href="http://www.php.net/die"><span style="color:#000066;">die</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$result</span>-&gt;<span style="color:#006600;">getMessage</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#616100;">else</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'OK'</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Con los nombres de las variables se entiende perfectamente como funciona el tema.</p>
<h4>Generando una nube de tags</h4>
<p>A continuación una utilización un poco más divertida, generar una nube con todas las etiquetas de una cuenta determinada:</p>
<div class="syntax_hilite">
<div id="php-26">
<div class="php"><span style="color:#0000FF;">$tags</span> = <span style="color:#0000FF;">$dlc</span>-&gt;<span style="color:#006600;">getTags</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#616100;">foreach</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$tags</span> <span style="color:#616100;">as</span> <span style="color:#0000FF;">$key</span> =&gt; <span style="color:#0000FF;">$value</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'&lt;a href=&quot;http://del.icio.us/'</span>.<span style="color:#0000FF;">$username</span>.<span style="color:#FF0000;">'/'</span>.<span style="color:#0000FF;">$key</span>.<span style="color:#FF0000;">'&quot; title=&quot;'</span>.<span style="color:#0000FF;">$key</span>.<span style="color:#FF0000;">' ('</span>.<span style="color:#0000FF;">$value</span>.<span style="color:#FF0000;">')&quot; style=&quot;font-size:'</span>.<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;">70</span>+<span style="color:#CC66CC;">14</span>*<span style="color:#0000FF;">$value</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#FF0000;">'%&quot;&gt;'</span>.<span style="color:#0000FF;">$key</span>.<span style="color:#FF0000;">'&lt;/a&gt; '</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Lo anterior sólo es un ejemplo rápido, dependiendo de la cantidad de etiquetas y enlaces se debería hacer algo más con el <em>font-size</em>. Puedes ver funcionando el anterior código sobre mi cuenta en del.icio.us en este <a href="http://www.phpbsd.net/scripts/ejemplo-de-nube-de-tags.php" title="PHPBSD.net &raquo; scripts &raquo; Ejemplo de nube de tags">ejemplo de nube de tags</a>.</p>
<p>Con Services_Delicious se ha de tener en cuenta que aunque podemos enviar datos con la clásica codificación iso-8859-1 <strong>las respuestas vienen en UTF-8</strong>, hemos de trabajar con UTF-8 o usar las funciones <em>utf8_encode()</em> y <em>utf8_decode()</em> según convenga, otra opción es modificar Services_Delicious y cambiar la forma de trabajar con XML_Serializer.</p>
<h4>Aplicaciones</h4>
<p>Aunque la API es muy sencilla nos permite añadir tags a prácticamente cualquier tipo de aplicación PHP, por ejemplo con el anterior código fácilmente nos curramos un pluguin para <strong>WordPress</strong> que cada vez que colgamos un post lo guarde en del.icio.us, que permita generar una nube de tags, etc. (si es que todavía no existe). Otro ejemplo es con una aplicación de comercio electrónico con stock online como un <strong>supermercado</strong> o una <strong>web de viajes</strong>, podemos hacer un script que recorra la BD de turno guardando todos los productos en del.icio.us y permitiendo trabajar con tags, que los usuarios puedan actualizarlos, generar nubes con ellos, etc.</p>
<p>Si a pesar de disponer de tu aplicación PHP en tus servidores o en tu servicio de hosting te gusta sacarte el trabajo de encima con servicios como FeedBurner para los RSS, Flickr para las imágenes, YouTube para los Vídeos... <strong>¿porque no usar del.icio.us para tus tags?</strong></p>
<p>Trabajar con del.icio.us para los tags de tu web tiene la ventaja de que del.icio.us en si es un <strong>buen sistema de promoción</strong>, mucha gente anda suscrita a RSS de determinados tags, se busca bastante directamente en del.icio.us, etc., y también tiene su <strong>efecto en SEO</strong>, cada nuevo tag representa un backlink hacia nosotros desde la página de dicho tag. El inconveniente de trabajar con un tercero está claro, que el usuario se pierda por del.icio.us y no vuelva a nuestra tienda o a nuestro blog, aunque siempre podemos usar del.icio.us y no enlazarlos.</p>
<p>A parte de añadir la dimensión de "tag" a nuestra aplicación otro ejemplo de uso de la API de del.icio.us es acceder a <strong>nuestros bookmarks</strong> de una forma totalmente personalizada y poder mostrarlos como queramos. Un ejemplo de esto es lo que hace <a target="_blank" href="http://www.pauiglesias.com/" title="Blog de Pau Iglesias">Pau Iglesias</a> en la <a target="_blank" href="http://www.pauiglesias.com/links/" title="Enlaces en el Blog de Pau Iglesias">sección de enlaces</a> de su blog, aunque usando <a target="_blank" href="http://www.pauiglesias.com/delicious-php-api/" title="del.icio.us PHP API en el Blog de Pau Iglesias">otra clase para acceder a la API de del.icio.us</a> que también está muy bien, de hecho es un proyecto más maduro que Services_Delicious.</p>
<p>Esta otra clase es una modificación del mismo Pau Iglesias de la <a target="_blank" href="http://dietrich.ganx4.com/delicious/" title="Dietrich Ayala | del.icio.us PHP API">clase original</a> de <strong>Dietrich Ayala</strong>, autor de las conocidas <a target="_blank" href="http://sourceforge.net/projects/nusoap/" title="SourceForge.net: NuSOAP - SOAP Toolkit for PHP">NuSOAP</a>. En comparación Services_Delicious me gusta más porque básicamente me gusta trabajar con PEAR y usa XML_Serializer/HTTP_Request que, a parte de que ya me las conozco, hacen que el código sea muy limpio y fácilmente adaptable a tus necesidades, pero si no te gustan las PEAR el proyecto <strong>del.icio.us PHP API de Pau Iglesias</strong> se merece una ojeada, proporciona más o menos las mismas funcionalidades que Services_Delicious pero con el añadido de un interesante sistema de cache.</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/02/09/leyendo-xml-desde-php-con-simplexml/' rel='bookmark' title='Permanent Link: Leyendo XML desde PHP con SimpleXML'>Leyendo XML desde PHP con SimpleXML</a></li><li><a href='http://www.phpbsd.net/2007/02/04/envio-de-emails-desde-php-usando-varios-metodos-pear-mail_mime-mail-y-error_log/' rel='bookmark' title='Permanent Link: Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)'>Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)</a></li><li><a href='http://www.phpbsd.net/2007/12/12/como-interactuar-con-google-desde-php-usando-zend-framework/' rel='bookmark' title='Permanent Link: Como interactuar con Google desde PHP usando Zend Framework'>Como interactuar con Google desde PHP usando Zend Framework</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2007/06/18/jugando-con-delicious-desde-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar clases PEAR en un hosting compartido</title>
		<link>http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/</link>
		<comments>http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 02:21:34 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/</guid>
		<description><![CDATA[En muchas ocasiones disponemos de un servicio de hosting compartido que no tiene las PEAR instaladas, o que ofrece una instalación mínima que no incluye las clases que necesitamos. A continuación describo como realizar una instalación local de las PEAR en un servidor compartido usando la linea de comandos o un navegador web. A parte [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/05/nuevo-blog-para-las-nuevas-pear/' rel='bookmark' title='Permanent Link: Nuevo blog para las &#8220;nuevas&#8221; PEAR'>Nuevo blog para las &#8220;nuevas&#8221; PEAR</a></li><li><a href='http://www.phpbsd.net/2007/02/06/datos-xml-bonitos-y-mas-leibles-en-php-usando-pear-xml_beautifier/' rel='bookmark' title='Permanent Link: Datos XML bonitos y más leíbles en PHP usando PEAR XML_Beautifier'>Datos XML bonitos y más leíbles en PHP usando PEAR XML_Beautifier</a></li><li><a href='http://www.phpbsd.net/2007/02/04/envio-de-emails-desde-php-usando-varios-metodos-pear-mail_mime-mail-y-error_log/' rel='bookmark' title='Permanent Link: Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)'>Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>En muchas ocasiones disponemos de un servicio de hosting compartido que no tiene las <a target="_blank" href="http://pear.php.net/" title="PEAR :: The PHP Extension and Application Repository">PEAR</a> instaladas, o que ofrece una instalación mínima que no incluye las clases que necesitamos. A continuación describo como realizar una <strong>instalación local de las PEAR en un servidor compartido</strong> usando la linea de comandos o un navegador web. A parte de instalaciones en servicios de hosting estos procedimientos resultan muy útiles en otras ocasiones, por ejemplo si queremos probar nuevas clases o distintas versiones de clases sin necesidad de instalarlas en el sistema.</p>
<h4>Instalación por consola</h4>
<p>Si disponemos de acceso SSH, Telnet, o directo a la consola del servidor este es el procedimiento a seguir.</p>
<p><strong>[1]</strong> Iniciamos la sesión de usuario.</p>
<p><strong>[2]</strong> Creamos una configuración por defecto para las PEAR:</p>
<p><code>$ pear config-create $HOME .pearrc</code></p>
<p><strong>[3]</strong> Creamos un directorio temporal en nuestra cuenta para evitarnos problemas de permisos en el directorio "/tmp" del sistema:</p>
<p><code>$ mkdir $HOME/tmp</code></p>
<p><strong>[4]</strong> Cambiamos las variables necesarias para que trabajen con nuestro directorio temporal:</p>
<p><code>$ pear config-set download_dir $HOME/tmp/download<br />
$ pear config-set temp_dir $HOME/tmp</code></p>
<p><strong>[5]</strong> Verificamos la correcta configuración:</p>
<p><code>$ pear config-show</code></p>
<p><strong>[6]</strong> Instalamos el sistema base:</p>
<p><code>$ pear install -o PEAR</code></p>
<p><strong>[7]</strong> Instalamos las clases PEAR que necesitemos:</p>
<p><code>$ pear install &lt;clase&gt;</code></p>
<p>o si queremos instalar alguna versión beta:</p>
<p><code>$ pear install &lt;clase&gt;-beta</code></p>
<h4>Instalación vía web</h4>
<p>Si sólo disponemos de acceso por FTP o Web (como yo con <a title="HOSTGATOR WEB HOSTING - cPanel, Reseller, and Dedicated Website Hosting" target="_blank" href="http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=ojimenez">HostGator</a>) o si no queremos trabajar con comandos estos son los pasos necesarios para realizar una instalación vía web.</p>
<p><strong>[1]</strong> Vamos a <a target="_blank" href="http://go-pear.org/" title="go-pear.org">http://go-pear.org/</a> y guardamos el script PHP que aparece como <em>go-pear.php</em>.</p>
<p><strong>[2]</strong> Creamos un directorio en nuestro servidor, por ejemplo "pear", y copiamos <em>go-pear.php</em> dentro.</p>
<p><strong>[3]</strong> Abrimos con un navegador la URL correspondiente, por ejemplo:<br />
<em>http://ejemplo.com/pear/go-pear.php</em></p>
<p><strong>[4]</strong> Seguimos los pasos que nos aparecen por pantalla, las opciones por defecto son válidas en la mayoría de ocasiones.</p>
<p><strong>[5]</strong> Posteriormente podremos gestionar las clases PEAR instaladas abriendo:<br />
<em>http://ejemplo.com/pear/</em><br />
Allí nos encontraremos el <strong>Web-based PEAR Frontend</strong> que nos permitirá instalar, desinstalar y actualizar clases, buscar nuevas clases, cambiar la configuración, etc.</p>
<p><strong>[6]</strong> Es importante proteger el directorio de las PEAR para que no sea accesible al público. Al estar dentro del <em>DocumentRoot</em> del servidor Apache cualquiera podrá acceder a la configuración de nuestras PEAR a no ser que protejamos el directorio con <a target="_blank" href="http://httpd.apache.org/docs/2.0/howto/auth.html" title="Autentificación, Autorización y Control de Acceso - Servidor HTTP Apache">usuario+contraseña y/o filtrando por IP</a>.</p>
<p>Snapshot del frontend web de las PEAR:</p>
<p><img src="http://www.phpbsd.net/wp-content/images/snapshot_pear.png" alt="PEAR Frontend snapshot" /></p>
<h4>Configuraciones finales</h4>
<p>Una vez completado con éxito cualquiera de los dos procedimientos anteriores sólo nos faltará añadir el directorio que contiene las clases PEAR, en el ejemplo "pear/PEAR", al <a target="_blank" href="http://es2.php.net/manual/es/ini.core.php#ini.include-path" title="PHP: Descripción de las directivas de núcleo en php.ini - Manual">include_path</a> del PHP para que funciones como <em>include()</em> y <em>require()</em> puedan encontrar las nuevas clases:</p>
<div class="syntax_hilite">
<div id="php-28">
<div class="php"><a href="http://www.php.net/set_include_path"><span style="color:#000066;">set_include_path</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/get_include_path"><span style="color:#000066;">get_include_path</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.PATH_SEPARATOR.<span style="color:#FF0000;">'/home/usuario/pear/PEAR'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>Se ha de cambiar "/home/usuario" por la ruta física a tu home de usuario. En el último paso del proceso de instalación vía web se muestra la ruta física a las clases, si has realizado una instalación por consola teclea <em>pwd</em> en tu home y añade "pear/PEAR".</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/05/nuevo-blog-para-las-nuevas-pear/' rel='bookmark' title='Permanent Link: Nuevo blog para las &#8220;nuevas&#8221; PEAR'>Nuevo blog para las &#8220;nuevas&#8221; PEAR</a></li><li><a href='http://www.phpbsd.net/2007/02/06/datos-xml-bonitos-y-mas-leibles-en-php-usando-pear-xml_beautifier/' rel='bookmark' title='Permanent Link: Datos XML bonitos y más leíbles en PHP usando PEAR XML_Beautifier'>Datos XML bonitos y más leíbles en PHP usando PEAR XML_Beautifier</a></li><li><a href='http://www.phpbsd.net/2007/02/04/envio-de-emails-desde-php-usando-varios-metodos-pear-mail_mime-mail-y-error_log/' rel='bookmark' title='Permanent Link: Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)'>Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>

