<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Tema: PHP | Sentido Web</title>
<link>http://sentidoweb.com/</link>
<description>Actualidad y maneras de hacer en Internet (programación, diseño, tendencias, negocios...)</description>
<language>es</language>
<copyright>Copyright 2008</copyright>
<lastBuildDate>Wed, 02 Jul 2008 13:15:00 +0000</lastBuildDate>
<generator>http://www.movabletype.org/?v=3.2</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>Comparativa de velocidades de frameworks PHP</title>
<description><![CDATA[<p>Interesante estudio que muestra la velocidad de tres frameworks PHP (Cake PHP, CodeIgniter y Zend Framework). </p>

<p>Realiza diferentes pruebas: sin usar caché, usando caché propio, usando caché externo, acceso a BD, acceso mediante Active Records, ... Los resultados demuestran que CodeIgniter es el más rápido y Cake PHP el más lento.</p>

<p>Es también destacable los datos sobre número de peticiones por segundo cuando se usa un framework a cuando se usa HTML estático. Por eso es recomendable realizar un caché para servir HTML estático.</p>

<p>El autor también realiza una <a href="http://www.avnetlabs.com/php/php-frameworks-revisited-codeigniter-vs-zend-framework">comparativa de funcionalidades entre CodeIgniter y Zend Framework</a>, aunque lo miraría con cuidado, porque dice que CI no admite internacionalización y no es cierto.</p>

<p><a href="http://www.avnetlabs.com/php/php-framework-comparison-benchmarks">PHP framework comparison benchmarks</a><br />
</p>]]></description>
<link>http://sentidoweb.com/2008/07/02/comparativa-de-velocidades-de-frameworks-php.php</link>
<guid>http://sentidoweb.com/2008/07/02/comparativa-de-velocidades-de-frameworks-php.php</guid>
<category>PHP</category>
<pubDate>Wed, 02 Jul 2008 13:15:00 +0000</pubDate>
</item>
<item>
<title>MemProxy: proxy con PHP y memcached</title>
<description><![CDATA[<p><strong>MemProxy</strong> es un script PHP sencillo pero potente, que nos permite tener un servidor proxy de peticiones web y cachea los contenidos en memcached. Tan solo es necesario PHP5.2, la extensión PECL para memcache, servidor web con capacidad de re-escritura y memcached.</p>
<p>En el siguiente ejemplo:</p>
<pre><code lang="php">$backend_array = array(
  "www.example.com" =>
    array(
      array("app1.example.com", 80),
      array("app2.example.com", 80),
      array("app3.example.com", 80),
    ),
  "another.example.com" =>
    array(
      array("app1.example.com", 8080),
      array("app2.example.com", 8080),
      array("app3.example.com", 8080),
    ),
);</code></pre>
<p>las claves de los arrays (www.example.com y another.example.com) son los host names de los sitios en los que se quiere hacer proxy. MemProxy usará el valor de HTTP_HOST para determinar la clave. Esto sería como un hosting virtual basado en nombres.</p>
<p><a href="http://code.google.com/p/memproxy/">MemProxy</a></p>]]></description>
<link>http://sentidoweb.com/2008/07/01/memproxy-proxy-con-php-y-memcached.php</link>
<guid>http://sentidoweb.com/2008/07/01/memproxy-proxy-con-php-y-memcached.php</guid>
<category>PHP</category>
<pubDate>Tue, 01 Jul 2008 11:15:00 +0000</pubDate>
</item>
<item>
<title>Script PHP para sincronizar estructuras de BD MySQL</title>
<description><![CDATA[<p>Interesante script que permite dados dos estructuras del MySQL, obtenidas por ejemplo usando un mysqldump, ver que diferencias hay entre ambos y devuelve las queries necesarias para igualar las dos estrucuras.</p>
<p>Por ejemplo, si tenemos la estructura siguiente:</p>
<pre><code lang="sql">CREATE TABLE IF NOT EXISTS `archive` (
  `id` int(11) NOT NULL auto_increment,
  `topFile` varchar(255) NOT NULL default '',
  `msgId` int(11) NOT NULL default '0',
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `topTpl` varchar(255) NOT NULL default '',
  `file` varchar(255) NOT NULL default '',
  `template` varchar(255) NOT NULL default '',
  `instanceKey` varchar(255) NOT NULL default '',
  `orderby` varchar(25) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10256 ;</code></pre>
<p>Y este otro:</p>
<pre><code lang="sql">CREATE TABLE IF NOT EXISTS `archive` (
  `id` int(11) NOT NULL auto_increment,
  `topFile` varchar(255) NOT NULL default '',
  `msgId` int(11) NOT NULL default '0',
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `topTpl` varchar(255) NOT NULL default '',
  `file` varchar(255) NOT NULL default '',
  `template` varchar(255) NOT NULL default '',
  `instanceKey` varchar(255) NOT NULL default '',
  `encoding` varchar(50) NOT NULL default '',
  `orderby` varchar(255) NOT NULL default '',
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10256 ;</code></pre>
<p>Nos devolvería las siguientes sentencias:</p>
<pre><code lang="sql">ALTER TABLE `archive` ADD `encoding` varchar(50) NOT NULL;
ALTER TABLE `archive` MODIFY `orderby` varchar(255) NOT NULL;
ALTER TABLE `archive` MODIFY `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
ALTER TABLE `archive` DROP PRIMARY KEY;</code></pre>
<p>Un script bastante útil cuando, debido al despiste, tenemos diferencias entre la base de datos de desarrollo y la de producción y no sabemos qué cambios hemos realizado.</p>
<p><a href="http://www.phpclasses.org/browse/package/4615.html">Database structure synchronizer</a></p>]]></description>
<link>http://sentidoweb.com/2008/06/18/script-php-para-sincronizar-estructuras-de-bd-mysql.php</link>
<guid>http://sentidoweb.com/2008/06/18/script-php-para-sincronizar-estructuras-de-bd-mysql.php</guid>
<category>PHP</category>
<pubDate>Wed, 18 Jun 2008 17:45:00 +0000</pubDate>
</item>
<item>
<title>Usar Akismet en cualquier lugar con PHP</title>
<description><![CDATA[<p>Librería para trabajar con Akismet en cualquier lugar usando PHP. Su uso es muy sencillo y nos permite identificar comentarios como spam.</p>
<p>Tiene 3 funciones básicas en modo estático:</p>
<pre><code lang="php">// Comprueba si un comentario es spam
aksimet_check( $vars )
// Re-clasifica un comentario como spam
aksimet_spam( $vars )
// Re-clasifica un comentario como NO spam
aksimet_ham( $vars )</code></pre>
<p>Dentro de la variable $vars se puede indicar: IP del usuario, User Agent, contenido del comentario, referrer, permaling, tipo de comentario, autor del comentario, email del autor del comentario y url del autor del comentario.</p>
<p>Quizás se pudiera usar para saber si una IP es spam o no en cualquier otro tipo de aplicaciones que no estén dirigidas a blogs.</p>
<p><a href="http://vanhegan.net/software/akismet/">Akismet para PHP</a></p>
<p>Vía / <a href="http://www.askapache.com/webmaster/add-akismet-anti-spam-to-php.html">AskApache</a></p>


]]></description>
<link>http://sentidoweb.com/2008/06/16/usar-akismet-en-cualquier-lugar-con-php.php</link>
<guid>http://sentidoweb.com/2008/06/16/usar-akismet-en-cualquier-lugar-con-php.php</guid>
<category>PHP</category>
<pubDate>Mon, 16 Jun 2008 15:00:00 +0000</pubDate>
</item>
<item>
<title>Librería PHP para OpenId</title>
<description><![CDATA[<p>OpenId es un sistema de identificación descentralizado que últimamente está dando mucho de que hablar, algunas veces para bien, y otras no tanto. Aún así, si necesitamos utilizar OpenId en nuestra aplicación, necesitaremos la librería <strong>PHP OpenID Library</strong>, la cual tiene las siguientes características:</p>
<ul><li>Funciona desde PHP 4.3 hasta PHP 5.2.4</li>
<li>Licencia Apache Software License</li>
<li>Bien documentada, con ejemplos y casos de test</li>
<li>Usa CURL pero no depende de esta extensión</li>
<li>Incluye módulos para Attribute Exchange, Simple Registration y PAPE</li>
<li>Soporta i-names</li>
<li>Soporta los protocolos OpenID de forma transparente</li></ul>
<p><a href="http://openidenabled.com/php-openid/">PHP OpenID Library</a></p>]]></description>
<link>http://sentidoweb.com/2008/06/11/libreria-php-para-openid.php</link>
<guid>http://sentidoweb.com/2008/06/11/libreria-php-para-openid.php</guid>
<category>PHP</category>
<pubDate>Wed, 11 Jun 2008 10:30:00 +0000</pubDate>
</item>
<item>
<title>Benchmarks de PHP</title>
<description><![CDATA[<p><strong>The PHP Benchmark</strong> es un sitio que realiza tests de prueba para ver rendimientos de funciones y así programar de forma más eficiente. La página está bastante completa, ya que también ofrece el código de las funciones que ha ejecutado.</p>
<p>Gracias a las pruebas podemos darnos cuenta de:</p>
<ul><li>Realizar un <em>foreach</em> es siempre más rápido, y si no recuperamos la clave del array mejor aún.</li>
<li>Un <em>for</em> es más rápido si no calculamos previamente en una variable el tamaño del array que recorremos, y que <em>sizeof</em> es más rapido que <em>count</em>.</li>
<li>Cuando vamos a asignar el valor de una posición de un array a una variable para tratar con ella, es conveniente hacerlo por referencia (<em>$alias = <strong>&</strong>$aSingleDimArray[$i]</em>).</li>
<li>No es más rápido crear un objeto como referencia (<em>$obj =<strong>&</strong> new SomeClass();</em>).</li>
<li><em>if</em> es más rápido que <em>switch/case</em>, y ligeramente más rápido es usar <em>==</em> que <em>===</em>.</li>
<li>Parece ser que el uso de comilla simple o doble en las últimas versiones se ha mejorado y no existe apenas diferencia.</li></ul>
<p><a href="http://www.phpbench.com/">The PHP Benchmark</a></p>]]></description>
<link>http://sentidoweb.com/2008/06/05/benchmarks-de-php.php</link>
<guid>http://sentidoweb.com/2008/06/05/benchmarks-de-php.php</guid>
<category>PHP</category>
<pubDate>Thu, 05 Jun 2008 09:45:00 +0000</pubDate>
</item>
<item>
<title>Manual de instalación y configuración de Suhosin</title>
<description><![CDATA[<p>Ya hace un año hablé de <a href="http://sentidoweb.com/2007/03/07/suhosin-sistema-de-proteccion-para-php.php">Suhosin</a>, un sistema avanzado diseñado para proteger los servidores y a los usuarios de defectos conocidos y desconocidos del core de PHP y de las aplicaciones realizadas con PHP.</p>

<p>Ahora, en el relanzado <a href="http://PHPFreaks.com">PHPFreaks</a> nos muestran como realizar la instalación en Debian y CentOS, y cómo configurarlo.</p>

<p>Por cierto, curioso que un manual tan corto te lo dividan en 4 páginas, será para ganar visitas...</p>

<p><a href="http://www.phpfreaks.com/tutorial/hardening-php-with-suhosin">Hardening PHP with Suhosin</a></p>]]></description>
<link>http://sentidoweb.com/2008/05/28/manual-de-instalacion-y-configuracion-de-suhosin.php</link>
<guid>http://sentidoweb.com/2008/05/28/manual-de-instalacion-y-configuracion-de-suhosin.php</guid>
<category>PHP</category>
<pubDate>Wed, 28 May 2008 14:00:00 +0000</pubDate>
</item>
<item>
<title>Leer Google Notebook desde PHP</title>
<description><![CDATA[<p>La gente de IBM se ha creado un tutorial que nos muestra como recuperar los datos de nuestro <a href="http://www.google.com/notebook">Google Notebook</a>, aplicación que nos permite crear notas dentro de las aplicaciones ofrecidas por Google.</p>

<p>Inicialmente nos explican como es la API que ofrece Google, ya que devuelve los datos en formato <acronym title="Representational state transfer">REST</acronym>. Después leeremos la respuesta usando la librería <a href="http://es2.php.net/manual/es/book.simplexml.php">SimpleXML</a> y mostraremos los notebooks disponibles. Pasando después a mostrar el contenido de cada uno de ellos.</p>

<p>El único problema que hay con Google Notebook y su API es que el notebook debe ser público para poder acceder a él.</p>

<p><a href="http://www.ibm.com/developerworks/xml/library/x-googlentbk/index.html?ca=drs-tp2108">Process and integrate Google Notebook data with PHP</a></p>]]></description>
<link>http://sentidoweb.com/2008/05/26/leer-google-notebook-desde-php.php</link>
<guid>http://sentidoweb.com/2008/05/26/leer-google-notebook-desde-php.php</guid>
<category>PHP</category>
<pubDate>Mon, 26 May 2008 11:00:00 +0000</pubDate>
</item>
<item>
<title>SecureImage: CAPTCHA en PHP</title>
<description><![CDATA[<p>SecureImage es un CAPTCHA realizado en PHP (necesario GD) que nos permite evitar el abuso del spam protegiéndonos de sus ataques.</p>

<p><img alt="secureimage.png" src="http://sentidoweb.com/img/2008/05/secureimage.png" width="350" height="346" class="center" /></p>

<p>Es muy fácil de usar, ya que en solo 3 líneas de código te muestra la imagen o valida la entrada en 6 líneas de código. Permite seleccionar el juego de caracteres, la fuente TTF o fuentes GD, permite añadir imagenes de fondo, modificar el color, el ángulo y la transparencia del código, añadir líneas que tachen la imagen o generar ficheros wav con el CAPTCHA audible.</p>

<p><a href="http://www.phpcaptcha.org/">SecureImage</a></p>

<p><a href="http://www.phpdeveloper.org/news/10231">PHPDeveloper.org</a></p>]]></description>
<link>http://sentidoweb.com/2008/05/23/secureimage-captcha-en-php.php</link>
<guid>http://sentidoweb.com/2008/05/23/secureimage-captcha-en-php.php</guid>
<category>PHP</category>
<pubDate>Fri, 23 May 2008 09:20:00 +0000</pubDate>
</item>
<item>
<title>VCL for PHP: framework para PHP</title>
<description><![CDATA[<p>VCL para PHP es un framework pensado para ser usado en el IDE Delphi for PHP. Quizás no sea el framework ideal, pero permite realizar aplicaciones de forma rápida, y eso, en muchos proyectos, suele ser lo que importa.</p>

<p>Nos ofrece la posibilidad de crear aplicaciones orientadas a objetos, sistema <acronym title="Model View Controller">MVC</acronym>, internacionalización, motor de plantillas, abstracción Ajax, abstracción de la base de datos, filtros para los datos de entrada e integración con webservices.</p>

<p>Se puede ver unos ejemplos <a href="http://www.qadram.com/vcl4php/index.php?ac=1800">aquí</a></p>

<p>Gracias <a href="http://www.innovacionweb.com/">InnovacionWeb.com</a> por el aviso</p>]]></description>
<link>http://sentidoweb.com/2008/05/22/vcl-for-php-framework-para-php.php</link>
<guid>http://sentidoweb.com/2008/05/22/vcl-for-php-framework-para-php.php</guid>
<category>PHP</category>
<pubDate>Thu, 22 May 2008 09:45:00 +0000</pubDate>
</item>
<item>
<title>Variables del servidor útiles en PHP</title>
<description><![CDATA[<p>Resumen de algunas variables que podemos obtener del servidor y que nos pueden ayudar en nuestras aplicaciones:</p>
<ul><li><strong>$_SERVER['REQUEST_URI']</strong>: devuelve la URL con la que se accede al script que se está ejecutando. Devolvería algo así como <em>/script.php?param1=val1&param2=val2</em>.</li>
<li><strong>$_SERVER['DOCUMENT_ROOT']</strong>: devuelve el directorio raíz del servidor web, algo así como <em>/usr/tusitio/www</em>.</li>
<li><strong>$_SERVER['HTTP_HOST']</strong>: devuelve el nombre del dominio (por ejemplo, sentidoweb.com). Esto puede ser muy útil cuando se quieren usar paths absolutos en vez de relativos y queremos que funcione la aplicación en el servidor de desarrollo y en el de real.</li>
<li><strong>$_SERVER['HTTP_USER_AGENT']</strong>: nos devuelve información del navegador, cuál es y en qué sistema operativo se ejecuta. Útil si tenemos que hacer algún apaño por incompatibilidad de navegadores, para llevar tema de estadísticas o por ejemplo para devolver un archivo para descarga dependiente de S.O.</li>
<li><strong>$_SERVER['PHP_SELF']</strong>: devuelve el nombre del fichero que se está ejecutando.</li>
<li><strong>$_SERVER['QUERY_STRING']</strong>: devuelve la lista de parámetros que se pasan por URL (lo que sigue después de la interrogación).</li>
<li><strong>$_SERVER['REMOTE_ADDR']</strong>: devuelve la dirección IP de la máquina que está accediendo al script.</li>
<li><strong>$_SERVER['SCRIPT_FILENAME']</strong>: devuelve el path absoluto del script que se está ejecutando.</li></ul>
<p><a href="http://roshanbh.com.np/2008/05/useful-server-variables-php.html">8 useful server variables available in PHP</a></p>]]></description>
<link>http://sentidoweb.com/2008/05/16/variables-del-servidor-utiles-en-php.php</link>
<guid>http://sentidoweb.com/2008/05/16/variables-del-servidor-utiles-en-php.php</guid>
<category>PHP</category>
<pubDate>Fri, 16 May 2008 10:30:00 +0000</pubDate>
</item>
<item>
<title>CodeIgniter 1.6.2</title>
<description><![CDATA[<p><img alt="codeigniter.png" src="http://sentidoweb.com/img/2007/04/codeigniter.png" class="right" height="43" width="163" />Ha salido la nueva versión de <a href="http://CodeIgniter.com">CodeIgniter</a>, la cual repara una treintena de errores y añade algunas novedades, entre las que nos encontramos mejoras en el Active Record, posibilidad de indicar el código de retorno http en la función <em>redirect()</em>, nuevo fichero para manejar las constantes, mejoras en el File Helper, y en la librería ZIP, Helper para compatibilidades entre PHP4 y PHP5.</p>

<p>Recomendable su actualización</p>]]></description>
<link>http://sentidoweb.com/2008/05/14/codeigniter-162.php</link>
<guid>http://sentidoweb.com/2008/05/14/codeigniter-162.php</guid>
<category>PHP</category>
<pubDate>Wed, 14 May 2008 11:30:00 +0000</pubDate>
</item>
<item>
<title>Laboratorio: publicar en Twitter mediante CURL</title>
<description><![CDATA[<p>Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.</p>
<p>Para aquellos que no quieran sufrir lo que <a href="http://bitacoras.com/equipo">hemos</a> sufrido con <a href="http://twitterposter.com/">TwitterPoster</a> (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.</p>
<p>Os paso un script sencillito que he realizado:</p>
<pre><code lang="php">&lt;?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=<em>[usuario]</em>&password=<em>[contraseña]</em>");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('/<input name="authenticity_token" type="hidden" value="(.*)" \/>/', $result, $match);
$authenticity_token = $match[1];
preg_match('/<input type="hidden" name="siv" value="(.*)" \/>/', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=<em>[texto]</em>');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?&gt;</code></pre>
<p>¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, ...) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.</p>]]></description>
<link>http://sentidoweb.com/2008/05/13/laboratorio-publicar-en-twitter-mediante-curl.php</link>
<guid>http://sentidoweb.com/2008/05/13/laboratorio-publicar-en-twitter-mediante-curl.php</guid>
<category>PHP</category>
<pubDate>Tue, 13 May 2008 10:00:00 +0000</pubDate>
</item>
<item>
<title>Usar Open Flash Chart desde CakePHP</title>
<description><![CDATA[<p>Open Flash Chart es una de los mejores componentes Flash para crear gráficas, su uso es bastante sencillo, pero aún así, siempre viene bien tener una capa de abstracción para despreocuparnos de cómo se usa. Los que desarrollen usando CakePHP disponen de una librería que les facilitará la labor de realizar gráficas.</p>
<p>Un ejemplo de uso sería el siguiente:</p>
<pre><code lang="php">&lt;?php
$flashChart->begin(400, 250);
$flashChart->title('Example 4 - Pie Chart: My imaginary Browser Stats');
$browser_data = array(
    'Firefox' => array(
        'value' => 30
    ),
    'Opera' => array(
        'value' => 7
    ),
    'IE' => array(
        'value' => 38
    ),
    'Other' => array(
        'value' => 25
    )
);
$flashChart->pie($browser_data);

echo $flashChart->render();
?&gt;</code></pre>
<p><a href="http://bakery.cakephp.org/articles/view/open-flash-chart-helper-draw-charts-the-cake-way">Open Flash Chart Helper: draw charts the Cake way</a></p>]]></description>
<link>http://sentidoweb.com/2008/05/07/usar-open-flash-chart-desde-cakephp.php</link>
<guid>http://sentidoweb.com/2008/05/07/usar-open-flash-chart-desde-cakephp.php</guid>
<category>PHP</category>
<pubDate>Wed, 07 May 2008 14:30:00 +0000</pubDate>
</item>
<item>
<title>Marjory: webservice para indexar y buscar documentos</title>
<description><![CDATA[<p><strong>Marjory</strong> es un webservice que nos ayuda a indexar y buscar documentos realizado en PHP. Utiliza la búsqueda fulltext aunque también está disponible la búsqueda mediante Lucene (en un futuro pretenden sacar más).</p>

<p>No utiliza protocolos XML-RPC o SOAP, usa una interfaz REST para comunicarse con las otras aplicaciones. Aunque no estaría mal respuestas en JSON.</p>

<p>Está realizado con Zend Framework y usa la librería para Lucene como motor de búsqueda por defecto.</p>

<p><a href="http://code.google.com/p/marjory">Marjory</a></p>]]></description>
<link>http://sentidoweb.com/2008/05/06/marjory-webservice-para-indexar-y-buscar-documentos.php</link>
<guid>http://sentidoweb.com/2008/05/06/marjory-webservice-para-indexar-y-buscar-documentos.php</guid>
<category>PHP</category>
<pubDate>Tue, 06 May 2008 12:30:00 +0000</pubDate>
</item>


</channel>
</rss>