<?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>Blog de Laura Berdasco &#187; php</title>
	<atom:link href="http://www.lauraberdasco.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lauraberdasco.com</link>
	<description>Guías, trucos, procesos y modelos tecnológicos</description>
	<lastBuildDate>Thu, 20 Oct 2011 06:30:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Generación XML mediante PHP5, XMLWritter</title>
		<link>http://www.lauraberdasco.com/2009/10/generacion-xml-mediante-php-xmlwritter/</link>
		<comments>http://www.lauraberdasco.com/2009/10/generacion-xml-mediante-php-xmlwritter/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 18:38:52 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=464</guid>
		<description><![CDATA[Buenas noches a tod@s! El motivo de la publicación de hoy es la necesidad que hemos tenido de generar un XML con la lista de contactos de la que hablábamos el otro día (aquí y aquí), y el lenguaje escogido es el que utilizamos normalmente: PHP5. El método que os presentaré es muy sencillo y… <a href="http://www.lauraberdasco.com/2009/10/generacion-xml-mediante-php-xmlwritter/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p>Buenas noches a tod@s!</p>
<p>El motivo de la publicación de hoy es la necesidad que hemos tenido de generar un XML con la lista de contactos de la que hablábamos el otro día (<a href="http://www.lauraberdasco.com/?p=438" target="_blank">aquí</a> y <a href="http://www.lauraberdasco.com/?p=459" target="_blank">aquí</a>), y el lenguaje escogido es el que utilizamos normalmente: PHP5. El método que os presentaré es muy sencillo y ha sido compuesto con funcionalidades relacionadas con <strong>XMLWriter</strong> (<em>propia de PHP5</em>).</p>
<p>El listado de contactos importados de una cuenta de Gmail por ejemplo, es guardado en un <em>array</em>. Dicho <em>array</em> es pasado como parámetro del método que presento a continuación y dentro de él, se genera el XML. Tal que así:</p>
<p>[stextbox id="info"]private function getXML(array $contacts){<br />
$xml = new XMLWriter;<br />
$xml-&gt;openMemory();<br />
$xml-&gt;startDocument(&#8217;1.0&#8242;, &#8216;UTF-8&#8242;);<br />
$xml-&gt;startElement(&#8216;contacts&#8217;);<br />
foreach ($contacts as $email =&gt; $name) {<br />
$xml-&gt;startElement(&#8216;contact&#8217;);<br />
$xml-&gt;startElement(&#8216;user&#8217;);<br />
$xml-&gt;text($name);<br />
$xml-&gt;endElement();<br />
$xml-&gt;startElement(&#8216;mailbox&#8217;);<br />
$xml-&gt;text($email);<br />
$xml-&gt;endElement();<br />
$xml-&gt;endElement();<br />
<em>$xml-&gt;writeElement(&#8216;br&#8217;, &#8221;);</em><br />
}<br />
$xml-&gt;endElement();<br />
$xml-&gt;endDocument();<br />
echo $xml-&gt;outputMemory();<br />
}[/stextbox]</p>
<p><strong>NOTA</strong>: <em>$xml-&gt;writeElement(&#8216;br&#8217;, &#8221;); puede eliminarse ya que no debería formar parte del xml.  Pero de esta manera podréis ver si os muestra por pantalla todo el listado correctamente. Lo he utilizado para listar contact(user+mailbox) uno debajo de otro.<br />
</em></p>
<p>Esta solución ha sido ideada después de ver varias documentaciones y páginas web, y os comparto la que ha sido más importante <a href="http://www.webtaller.com/construccion/lenguajes/php/lecciones/xml-php5-php-2.php" target="_blank">aquí</a>. Cómo en todo lo relacionado con este mundillo, no hay una sola manera (más eficiente o menos) para hacer las cosas y seguro que podéis encontrar muchísimos scripts por ahí, pero espero que os sea de ayuda igualmente. Almenos para que véais por donde podéis empezar a probar.</p>
<p>Para más información sobre las diferentes funcionalidades de <em>XMLWritter</em>, os comparto el enlace de la<a href="http://www.php.net/manual/en/book.xmlwriter.php" target="_blank"> documentación de PHP</a> que habla sobre ello. Y en el caso que tengáis soluciones mejores, no dudéis en compartirlas aquí también.</p>
<p>Un saludo desde pingüinos y manzanitas world!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/10/generacion-xml-mediante-php-xmlwritter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problema con OpenInviter. Fatal error: Call to a member function isEmail() on a non-object in&#8230;</title>
		<link>http://www.lauraberdasco.com/2009/10/problema-con-openinviter-fatal-error-call-to-a-member-function-isemail-on-a-non-object-in/</link>
		<comments>http://www.lauraberdasco.com/2009/10/problema-con-openinviter-fatal-error-call-to-a-member-function-isemail-on-a-non-object-in/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 08:07:34 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[configuracion]]></category>
		<category><![CDATA[contactos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[solucion]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=459</guid>
		<description><![CDATA[Fatal error: Call to a member function isEmail() on a non-object in&#8230; es un error que ha estado dando vueltas por mi cabeza desde ayer, y gracias a una respuesta del foro oficial de la &#8216;herramienta&#8217; he podido dar una vuelta más al asunto. Uno de los problemas que teníamos era que OpenInviter trabaja con… <a href="http://www.lauraberdasco.com/2009/10/problema-con-openinviter-fatal-error-call-to-a-member-function-isemail-on-a-non-object-in/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p><strong><em>Fatal error: Call to a member function isEmail() on a non-object in&#8230;</em></strong> es un error que ha estado dando vueltas por mi cabeza desde ayer, y gracias a una respuesta del foro oficial de la &#8216;herramienta&#8217; he podido dar una vuelta más al asunto.</p>
<p>Uno de los problemas que teníamos era que OpenInviter trabaja con SQLite, y si no se tiene dicha extensión instalada en el sistema no es posible modificar algunos archivos sqllite con los que trabaja. No sé hasta que punto es esto bueno o no, pero aquí os dejo la posible solución publicada por este usuario:<br />
Si accedemos al archivo <em>conf.php</em> encontraremos una serie de atributos; debemos buscar aquellos que sean &#8216;state&#8217; y &#8216;update_files&#8217; cuyo valor es TRUE y cambiarlo a FALSE (estos dos atributos son los que se encargan de la parte SQLite), o en cualquier caso habilitar dicha extensión SQLite y dejar dichos valores como TRUE.</p>
<p>Otro de los problemas era que debemos eliminar, después de haber sido ejecutado, el archivo <em>postinstall.php</em>. Aún desconozco el uso real de dicho archivo, pero así te lo recomiendan en algún punto de la documentación. Con un poco de tiempo quiero investigar un poco más en ello.</p>
<p>Con estos dos problemas solucionados, ya tenemos otro tipo de sistema de importación de contactos de cuentas de GMAIL aunque también probaremos, con OpenInviter, las otras alternativas (importación de contactos de YahooMail, AOL, MSN, LinkedIn o <em>Plaxo</em> -wow <img src='http://www.lauraberdasco.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> -).</p>
<p>Esto es todo, de momento, desde el zulo, pingüinos y manzanitas world!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/10/problema-con-openinviter-fatal-error-call-to-a-member-function-isemail-on-a-non-object-in/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>¿CURL habilitado?</title>
		<link>http://www.lauraberdasco.com/2009/10/%c2%bfcurl-habilitado/</link>
		<comments>http://www.lauraberdasco.com/2009/10/%c2%bfcurl-habilitado/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 09:12:45 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[configuracion]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=454</guid>
		<description><![CDATA[Voy a compartir un truquillo que he encontrado por ahí, para poder saber si tenemos la extensión de PHP5 CURL corriendo en nuestro sistema. Podemos añadir la siguiente sentencia en nuestro archivo de prueba .php, para luego ejecutarlo allí dónde queramos probar la extensión. [stextbox id="info"]var_dump(curl_version());[/stextbox] Si no está disponible, var_dump no pintará nada por… <a href="http://www.lauraberdasco.com/2009/10/%c2%bfcurl-habilitado/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p>Voy a compartir un truquillo que he encontrado por ahí, para poder saber si tenemos la extensión de PHP5 CURL corriendo en nuestro sistema. Podemos añadir la siguiente sentencia en nuestro archivo de prueba .<em>php</em>, para luego ejecutarlo allí dónde queramos probar la extensión.</p>
<p>[stextbox id="info"]var_dump(curl_version());[/stextbox]</p>
<p>Si no está disponible, var_dump no pintará nada por pantalla y saltará un error sobre la función <em>curl_version()</em>.</p>
<p>Esto ha sido sacado de la siguiente <a href="http://www.wallpaperama.com/forums/how-to-find-out-if-php-is-compiled-with-curl-extension-installed-enabled-t1576.html">página web</a> y me ha servido para realizar algunas operaciones en nuestro servidor que requerían de dicha extensión.</p>
<h2>¿Cómo ver si está habilitado sobre un entorno Ubuntu?</h2>
<p>Debemos proceder a consultar el archivo de configuración de php que tengamos en nuestro sistema. En mi caso, dicho archivo se encuentra dentro de /etc/php5/conf.g/ y se llama curl.ini. Si visualizamos dicho archivo:</p>
<p>[stextbox id="info"]sudo nano curl.ini[/stextbox]</p>
<p>Veremos las siguientes líneas si está habilitado:</p>
<p>[stextbox id="info" caption="curl.ini"]# configuration for php CURL module<br />
extension=curl.so[/stextbox]</p>
<p>En el caso de que delante de <em>extension=curl.so </em>haya un símbolo #, procederemos a borrarlo (<em>NOTA</em>: # <em>es símbolo de comentario, por lo tanto es como si no estuviera escrito y no se ejecuta</em>).</p>
<p>Un saludo desde el zulo, pingüinos y manzanitas world!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/10/%c2%bfcurl-habilitado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Importación de Contactos de Gmail mediante Zend Framework</title>
		<link>http://www.lauraberdasco.com/2009/10/importacion-de-contactos-de-gmail-mediante-zend-framework/</link>
		<comments>http://www.lauraberdasco.com/2009/10/importacion-de-contactos-de-gmail-mediante-zend-framework/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 10:33:26 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[configuracion]]></category>
		<category><![CDATA[contactos]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[trucos]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=438</guid>
		<description><![CDATA[En el post de hoy voy a hablar sobre la importación de contactos de Gmail y os presentaré una pequeña solución que utiliza tokens de seguridad en vez de la introducción de cuenta y contraseña de los usuarios. Es una solución funcional, ya que aún está por maquetar y generalizar pero prefiero publicarla antes de… <a href="http://www.lauraberdasco.com/2009/10/importacion-de-contactos-de-gmail-mediante-zend-framework/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p>En el post de hoy voy a hablar sobre la importación de contactos de Gmail y os presentaré una pequeña solución que utiliza <em>tokens</em> de seguridad en vez de la introducción de cuenta y contraseña de los usuarios. Es una solución funcional, ya que aún está por maquetar y generalizar pero prefiero publicarla antes de que se me olvide. Por temas de trabajo debo dejarla un poco de lado.</p>
<p>El Zend Framework no da soporte a la API de Google Contacts, de momento, así que parte del trabajo que se había realizado para la integración de Youtube y Picasa no servía de mucho -en principio-. He leído en algún foro del Framework que se está trabajando en este nuevo módulo de Zend_GData, pero aún no hay una fecha de salida. Llegados a este punto, no ha quedado más remedio que pasar unas cuantas horas navegando por la red para poder encontrar alguna solución.</p>
<p>La primera de ellas apareció en este <a title="Memorias de un programador" href="http://www.memoriasdeunprogramador.com/?p=185&amp;cpage=1#comment-4" target="_blank">post</a>. Después de realizar nuevas clases y aprender un poco el funcionamiento de algunas funciones cUrl, no he conseguido hacerla funcionar finalmente por temas de autentificación y el token de seguridad. Estoy a la espera de recibir un mensaje del desarrollador a ver si nos puede echar una mano en el asunto.</p>
<p>La segunda de ellas apareció de una idea que tuve relacionada con el siguiente <a href="http://blog.charlvn.com/2008/11/google-contacts-api-with-zend-framework.html" target="_blank">post</a>. Del sistema que ya se había montado para Youtube y Picasa se podían añadir unas nuevas operaciones al objeto Zend_GData:</p>
<blockquote><p>$gdata = new Zend_Gdata($client);<br />
$query = new Zend_Gdata_Query(&#8220;http://www.google.com/m8/feeds/contacts/$username/full&#8221;);<br />
$feed = $gdata-&gt;getFeed($query);<br />
$entries = $gdata-&gt;retrieveAllEntriesForFeed($feed);</p></blockquote>
<p>En nuestro sistema, $client sería un objeto del tipo Zend_Gdata_HttpClient al que le hacemos un set de las cabeceras necesarias para la conexión con los sistemas Google, las llaves privadas y el token de seguridad provisto. Para más información sobre esto, podéis consultar el <a href="http://www.ixavi.com/?p=263" target="_blank">post de Xavi</a> dónde se explica el proceso que seguimos para sincronizar con Youtube y Picasa. Os comparto el código del método que nos genera dicho objeto $cliente:</p>
<blockquote><p>private function getClient($singleUseToken){<br />
$fclient = new Zend_Gdata_HttpClient();<br />
$fclient-&gt;setHeaders(&#8220;X-GData-Key: key=&#8221;.&#8217;google_key&#8217;);<br />
$fclient-&gt;setAuthSubPrivateKeyFile(&#8216;path-to-keys&#8217;,null, true);<br />
$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken(trim($singleUseToken),$fclient);<br />
$fclient-&gt;setAuthSubToken($sessionToken);<br />
return $fclient;<br />
}</p></blockquote>
<p>Para terminar os comparto el siguiente <a href="http://blog.unijimpe.net/importar-contactos-con-php/" target="_blank">enlace</a> que será la tercera solución que probaremos. Como se puede ver, es una clase llamada <em>Open Inviter</em> escrita en PHP5 que permite importar contactos de diferentes cuentas y aplicaciones.<br />
Vamos allá!!!</p>
<p>Un saludo desde pingüinos y manzanitas world!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/10/importacion-de-contactos-de-gmail-mediante-zend-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Por fin hemos dominado la subida de videos con la API de Youtube (desde servidor)</title>
		<link>http://www.lauraberdasco.com/2009/08/por-fin-hemos-dominado-la-subida-de-videos-con-la-api-de-youtube-desde-servidor/</link>
		<comments>http://www.lauraberdasco.com/2009/08/por-fin-hemos-dominado-la-subida-de-videos-con-la-api-de-youtube-desde-servidor/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 14:22:14 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[youtube]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=386</guid>
		<description><![CDATA[Será un post breve, pero quería reflejar la alegría de este día histórico. Después de muchas horas de estudio, errores, de documentarse, de pegarse de canto con la API de Youtube para poder subir vídeos, y desde un servidor externo (S3)&#8230; nuestro sistema es capaz de hacerlo! Hemos sudado la gota gorda pero después de… <a href="http://www.lauraberdasco.com/2009/08/por-fin-hemos-dominado-la-subida-de-videos-con-la-api-de-youtube-desde-servidor/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p>Será un post breve, pero quería reflejar la alegría de este día histórico. Después de muchas horas de estudio, errores, de documentarse, de pegarse de canto con la API de Youtube para poder subir vídeos, y desde un servidor externo (S3)&#8230; nuestro sistema es capaz de hacerlo! <img src='http://www.lauraberdasco.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hemos sudado la gota gorda pero después de 6 días y dos cabezas pensantes, lo hemos conseguido.</p>
<p>En los próximos días se publicará un post en el <a href="http://www.ixavi.com" target="_blank">blog de Xavi</a>, donde se explicará lo que se ha de tener en cuenta para poder comunicarse y subir videos a Youtube. Lo que no se ha conseguido desde la documentación de Youtube, Zend Framework y las API&#8217;s de Google (todo junto),&#8230; en los próximos días.</p>
<p>Un saludo desde pingüinos y manzanitas world!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/08/por-fin-hemos-dominado-la-subida-de-videos-con-la-api-de-youtube-desde-servidor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

