<?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>LaWebera.es &#187; Programación en PHP</title>
	<atom:link href="http://www.lawebera.es/manuales/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lawebera.es</link>
	<description>Otro sitio realizado con WordPress</description>
	<lastBuildDate>Thu, 02 Feb 2012 09:29:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Manual PHP. ¿Qué es PHP? una breve introducción</title>
		<link>http://www.lawebera.es/manuales/php/1.php</link>
		<comments>http://www.lawebera.es/manuales/php/1.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 22:23:30 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/1.php</guid>
		<description><![CDATA[Introducci&#243;n al lenguaje de programaci&#243;n PHP, uno de los m&#225;s usados en la red.]]></description>
			<content:encoded><![CDATA[<h2>Licencia del manual: Webs din&aacute;micas con PHP</h2>
<p>Autor: Alvaro del Castillo</p>
<p>Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los t&eacute;rminos de la <a href="http://www.lawebera.es/gnu-gfdl.php">Licencia de Documentaci&oacute;n Libre GNU</a>,  Versi&oacute;n 1.1 o cualquier otra versi&oacute;n posterior publicada por la Free  Software Foundation. Puede consultar una copia de la licencia original  en: <a href="http://www.gnu.org/copyleft/fdl.html">http://www.gnu.org/copyleft/fdl.html</a>.</p>
<h2>Sobre PHP</h2>
<h3> Introducci&oacute;n a PHP </h3>
<p>En mi experiencia  como desarrollador de aplicaciones web, <a href="http://www.lawebera.es/manuales/php/">PHP</a> ha significado junto al  servidor de web Apache, las dos herramientas claves para la creaci&oacute;n de  aplicaciones. PHP es un lenguaje sencillo, de sintaxis c&oacute;moda y similar  a la de otros lenguajes como C o C++, es r&aacute;pido a pesar de ser  interpretado, multiplataforma y dispone de una gran cantidad de  librer&iacute;as que facilitan much&iacute;simo el desarrollo de las aplicaciones.</p>
<p>El  c&oacute;digo generado es mantenible, se lee muy bien y podemos programar  utilizando objetos. PHP es un lenguaje ideal tanto para el que comienza  a desarrollar aplicaciones web como para el desarrollador  experimentado, y est&aacute; alcanzando unos niveles de uso (m&aacute;s de 1 mill&oacute;n  de webs lo utilizan ya) que convierten su conocimiento en algo  indispensable para los profesionales del desarrollo en Internet.</p>
<p>Y,  adem&aacute;s, PHP es un lenguaje basado en herramientas con licencia de  software libre, es decir, no hay que pagar ni licencias, ni estamos  limitados en su distribuci&oacute;n y, podemos ampliarlo con nuevas  funcionalidades si as&iacute; lo quisi&eacute;ramos. Respecto a su licencia, en la  versi&oacute;n PHP 3.0 era GPL, pasando a ser modificada en su versi&oacute;n 4.0,  por la incorporaci&oacute;n de Zend, un nuevo interprete de PHP mucho m&aacute;s  r&aacute;pido que el anterior de PHP. Este interprete Zend tiene asociado un  optimizador opcional, el cual ya est&aacute; m&aacute;s dentro del mundo comercial  que del software libre, tema que ha levantado algunas suspicacias  dentro de la comunidad de desarrolladores de software libre.</p>
<p>En  esta serie de presentaci&oacute;n de PHP mostraremos este lenguaje, como se  instala y configura, como se desarrolla con &eacute;l, las librer&iacute;as  fundamentales y como no, su excelente forma de trabajar con casi todas  las bases de datos, y en especial, con MySQL, con la que forma un  equipo estrella dentro del mundo de desarrollo software.</p>
<p>No  olvidaremos por otro lado a PostgreSQL, la base de datos que es  realmente software libre, y que avanza con piso firme para convertirse  en la base de datos de referencia dentro de cualquier proyecto libre,  sobre todo tras la publicaci&oacute;n de la versi&oacute;n 7.0.</p>
<p>En los  art&iacute;culos de la serie vamos a describir PHP en su &uacute;ltima versi&oacute;n, PHP4,  que por fin en Mayo del 2000 ha sido publicada. Posiblemente para  cuando el lector comience a desarrollar con PHP, esta versi&oacute;n 4 ser&aacute; la  est&aacute;ndar. En ella hay muchos cambios y mejoras que detallaremos a lo  largo de los art&iacute;culos de la serie.</p>
<p>La serie est&aacute; orientada  al uso conjunto de Apache y PHP, aunque PHP se puede compilar como un  ejecutable que puede ser utilizado como cgi-bin. De esta forma,  cualquier servidor de web que soporte cgi podr&iacute;a ejecutar las p&aacute;ginas  PHP. La ventaja que tiene Apache frente a estos es que podemos compilar  el interprete PHP como un m&oacute;dulo de Apache, por lo que la velocidad de  ejecuci&oacute;n de estas p&aacute;ginas PHP es muy superior, as&iacute; como el consumo de  recursos al cargarse el interprete de PHP una sola vez en memoria.</p>
<h3>&iquest;Qu&eacute; es PHP? </h3>
<p>Con estas siglas nos referimos a un lenguaje de programaci&oacute;n que  est&aacute; muy orientado al desarrollo de aplicaciones web. Cuando pedimos a  nuestro servidor de web una p&aacute;gina PHP, que no es m&aacute;s que un programa  PHP que genera HTML, antes de enviar dicha p&aacute;gina al cliente se la pasa  al interprete de PHP. Este la interpreta y es el resultado de esta  interpretaci&oacute;n del programa PHP, contenido en la p&aacute;gina PHP, lo que  termina llegando al cliente.</p>
<p>Supongamos que el contenido de una p&aacute;gina web que reside en el  servidor, y cuyo nombre es &quot;intro.php&quot;, tiene el siguiente contenido:</p>
<pre>&lt;? echo &quot;&lt;h1&gt;Mensaje desde PHP&lt;/h1&gt;&quot;;?&gt;</pre>
<p>Cuando un navegador le pida al servidor de web la p&aacute;gina  &quot;intro.php&quot;, el servidor de web va a darse cuenta, por la extensi&oacute;n  &quot;.php&quot;, de que esta p&aacute;gina ha de enviarse primero al interprete de PHP.  Este recibe el contenido de la p&aacute;gina y como resultado de esta  ejecuci&oacute;n (interpretaci&oacute;n) genera una p&aacute;gina <a href="http://www.lawebera.es/manuales/html/">HTML</a>, que es la que env&iacute;a  al cliente a trav&eacute;s de Apache. Como veremos en una p&aacute;gina PHP se puede  mezclar HTML y PHP, algo muy flexible pero que hay que manejar con  cuidado ya que puede llevar a confusiones y, sobretodo, a que el equipo  que dise&ntilde;e las p&aacute;ginas web y el que programe la aplicaci&oacute;n no puedan  ser independientes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/1.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. Instalación de PHP</title>
		<link>http://www.lawebera.es/manuales/php/1-3.php</link>
		<comments>http://www.lawebera.es/manuales/php/1-3.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 22:02:34 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/1-3.php</guid>
		<description><![CDATA[Tutorial explicativo de la instalaci&#243;n de PHP en un servidor Apache.]]></description>
			<content:encoded><![CDATA[<h2> C&oacute;mo instalar&nbsp; PHP </h2>
<p>Sin duda esta secci&oacute;n del manual debe de ser actualizada ya que se  refiere a&uacute;n a la &uacute;ltima beta de PHP4, pero salvo este detalle, el  procedimiento sigue siendo v&aacute;lido. Tambi&eacute;n hay que estar atentos a la  publicaci&oacute;n de Apache 2.0 ya que quiz&aacute;s, implique unos cambios mayores  dentro esta secci&oacute;n. Si alg&uacute;n lector quiere contribuir y actualizar la  versi&oacute;n ser&aacute; gratamente bienvenida.</p>
<p>Uno de los mayores quebraderos de cabeza de <a href="http://www.lawebera.es/manuales/php/">PHP</a> en sus comienzos era  que obligaba a tener Apache en c&oacute;digo fuente y compilarlo. Por fin la  instalaci&oacute;n de PHP se puede hacer de forma sencilla y sin tener que  modificar en casi nada a nuestro servidor de web. Tan s&oacute;lo necesitamos  tener una versi&oacute;n de Apache con soporte DSO para la carga din&aacute;mica de  objetos. La versi&oacute;n con la que se est&aacute; desarrollando este art&iacute;culo es  la 1.3.9 aunque toda la serie 1.3 tiene este soporte.</p>
<p>Si el lector tiene ya instalado PHP3 en su servidor de web Apache  debe de tomar la precauci&oacute;n de desactivarlo. Se puede tener de forma  simult&aacute;nea ambas versiones funcionando, pero este proceso es algo  complejo y no lo vamos a tratar de momento. Por ello el lector necesita  un servidor de web Apache sin soporte para PHP. La mejor forma de  comprobar este dato es editar el fichero de configuraci&oacute;n de Apache  &quot;httpd.conf&quot; (normalmente en el directorio &quot;/etc/httpd&quot;) y revisar que  no se hagan referencias en &eacute;l a PHP. Si las encontrara deber&iacute;a de  comentarlas y reiniciar el servidor de web.</p>
<p>Es necesario que los paquetes de desarrollo de Apache est&eacute;n tambi&eacute;n  instalados en el entorno del lector. Estos son b&aacute;sicamente los ficheros  de cabecera de la librer&iacute;as de Apache (&quot;/usr/include/apache&quot;), las  librer&iacute;as para extender Apache y alg&uacute;n ejecutable como &quot;apxs&quot; que es  una utilidad que permite a&ntilde;adir m&oacute;dulos de carga din&aacute;mica a Apache. El  resultado de nuestra compilaci&oacute;n de PHP va a ser uno de estos m&oacute;dulos.</p>
<p>Ha llegado el momento de obtener la &uacute;ltima versi&oacute;n de PHP de la red.  Esta la puede conseguir el lector de <a href="http://www.php.net/">http://www.php.net</a>.  Una vez que tengamos las fuentes de PHP4beta3 vamos a pasar a  instalarla. Los pasos a dar son:</p>
<ul>
<li>tar xvfz php-4.0b3.tar.gz</li>
<li>cd php-4.0b3</li>
<li>configure &#8211;with-apxs=/usr/sbin/apxs</li>
<li>make</li>
<li>make install (como superusuario)</li>
</ul>
<p>Si todo ha ido bien ya tenemos todo preparado para poder reiniciar  el servidor de web Apache con el m&oacute;dulo de PHP4 entre sus  funcionalidades. De la compilaci&oacute;n cabe destacar el gran tiempo que  transcurre en la compilaci&oacute;n de uno de los nuevos componentes de PHP4,  Zend, el motor principal para la interpretaci&oacute;n del lenguaje PHP.</p>
<p>Si el lector ha estado atento en la fase de &quot;make install&quot; habr&aacute;  podido observar como se utiliza la herramienta &quot;apxs&quot; para a&ntilde;adir  &quot;libphp4.so&quot; a los m&oacute;dulos de carga din&aacute;mica de Apache. La instrucci&oacute;n  en concreto es:</p>
<pre>/usr/sbin/apxs -i -a -n php4 libs/libphp4.so</pre>
<p>Esta herramienta copia este fichero al directorio donde residen los  dem&aacute;s m&oacute;dulos de carga din&aacute;mica, &quot;/usr/lib/apache&quot; normalmente, y  modifica el fichero de configuraci&oacute;n &quot;httpd.conf&quot; para que se cargue  este nuevo m&oacute;dulo al arrancar.</p>
<p>En Mandrake 6.1, y probablemente en RedHat 6.0 y superior, este  proceso no incluye de forma correcta la referencia al m&oacute;dulo dentro de  &quot;httpd.conf&quot; lo que nos obliga a editar este fichero y modificar la  l&iacute;nea con el contenido:</p>
<pre>LoadModule php4_module   lib/apache/libphp4.so</pre>
<p>por la l&iacute;nea</p>
<pre>LoadModule php4_module   modules/libphp4.so</pre>
<p>Ahora ya s&oacute;lo nos queda decirle a Apache que todos los ficheros que  acaben con la extensi&oacute;n &quot;.php&quot; sean enviados al interprete de PHP, algo  que logramos a&ntilde;adiendo a &quot;httpd.conf&quot; la l&iacute;nea:</p>
<pre>AddType application/x-httpd-php .php4</pre>
<p>En anteriores versiones de Apache exist&iacute;an tres ficheros de  configuraci&oacute;n y esta &uacute;ltima l&iacute;nea hab&iacute;a que insertarla en el fichero  &quot;srm.conf&quot;.</p>
<p>Reiniciamos nuestro servidor Apache, &quot;/etc/rc.d/init.d/httpd  restart&quot; en sistemas Red Hat y si todo ha ido bien tendremos ya todo  preparado para empezar a desarrollar con PHP. Si existe alg&uacute;n problema  el servidor de web no se arrancar&aacute;. Para detectar que puede estar  ocurriendo se pueden analizar los ficheros de registro de Apache del  directorio &quot;/var/log/httpd&quot; e intentar localizar all&iacute; el error. A veces  tambi&eacute;n es &uacute;til iniciar a mano el demonio de Apache sin la ayuda de  &quot;&quot;/etc/rc.d/init.d/httpd&quot;, ejecutando de forma directa  &quot;/usr/sbin/httpd&quot;.</p>
<p>Algo que nos puede confirmar de forma definitiva que todo ha ido  bien es una l&iacute;nea de registro dentro de &quot;/var/log/httpd/error_log&quot; con  un contenido similar a:</p>
<pre><div class="notice"></div> Apache/1.3.9 (Unix)
(NetRevolution Advanced Server/Linux-Mandrake)
PHP/4.0b3 configured -- resuming normal operations</pre>
<p>Si has logrado llegar ya hasta aqu&iacute;, prep&aacute;rate porque ahora viene lo  divertido: la <a href="http://www.lawebera.es/manuales/php/2.php">programaci&oacute;n de p&aacute;ginas PHP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/1-3.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. Programar en PHP</title>
		<link>http://www.lawebera.es/manuales/php/2.php</link>
		<comments>http://www.lawebera.es/manuales/php/2.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 21:43:10 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/2.php</guid>
		<description><![CDATA[Gu&#237;a introductoria a la programaci&#243;n de p&#225;ginas en PHP. Primeros pasos para programar en PHP.]]></description>
			<content:encoded><![CDATA[<h2> Programar p&aacute;ginas PHP </h2>
<p>Lo primero que vamos a hacer es  <strong>crear una p&aacute;gina PHP</strong> que nos informe de las caracter&iacute;sticas del  interprete de PHP que tenemos instalado en nuestro servidor de web.  Para ello debemos de crear una p&aacute;gina PHP con el contenido siguiente:</p>
<pre>&lt;? phpInfo(); ?&gt;</pre>
<p>Este  debe de ser el contenido de un fichero de nombre &quot;info.php&quot; y que debe  de estar en alg&uacute;n lugar accesible por el servidor de web. Quiz&aacute;s lo  mejor sea que lo guardes dentro de t&uacute; directorio personal web:  &quot;/home/tu_login/public_html&quot;. Por ejemplo yo lo tengo dentro del  directorio &quot;/home/acs/public_html/info.php&quot;. Una vez que lo tengas  guardado vamos a intentar abrir esta p&aacute;gina. Para ello apunta t&uacute;  navegador a la p&aacute;gina: &quot;http://localhost/~tu_login/info.php&quot;. En mi  caso dicha p&aacute;gina es: &quot;http://localhost/~acs/info.php&quot;.</p>
<p>Al  pedirle esta p&aacute;gina al servidor de web, este al ver su extensi&oacute;n llama  al interprete de PHP y le dice que &quot;ejecute&quot; la p&aacute;gina y le entregue  los resultados. El interprete abre la p&aacute;gina y ejecuta la llamada a la  funci&oacute;n &quot;phpInfo()&quot; que, como resultado, nos entrega toda la  informaci&oacute;n sobre el interprete de <a href="http://www.lawebera.es/manuales/php/">PHP</a> en formato <a href="http://www.lawebera.es/manuales/html/">HTML</a>. &iquest;Verdad que es  sencillo?.</p>
<p>Vamos con una p&aacute;gina algo m&aacute;s complicada. Y vamos  con la orientaci&oacute;n a objetos. PHP tiene soporte para la programaci&oacute;n  orientada a objetos, es decir, puedes crear clases para la construcci&oacute;n  de objetos, con sus constructores etc. El soporte de objetos que  tenemos en PHP no es tan potente como el de C++, pero cada vez es m&aacute;s  completo y en esta versi&oacute;n nueva de PHP4 este soporte ha sido mejorado.</p>
<p>Si  no sabes programar utilizando objetos en este curso algo vas a aprender  pero te recomiendo que sin m&aacute;s dilaci&oacute;n consigas alg&uacute;n buen libro o  tutorial por Internet. Los objetos cada vez tienen m&aacute;s fuerza a la hora  de desarrollar software. De cualquier forma en este curso vamos a  utilizar la programaci&oacute;n con objetos en un nivel muy b&aacute;sico.</p>
<p>En  nuestro siguiente ejemplo vamos a crear un objeto que nos va a permitir  acceder a diversas bases de datos. Claro est&aacute; que lo vamos a dejar sin  implementar a&uacute;n en gran parte, pero todo llegar&aacute;. Aqu&iacute; va el c&oacute;digo de  la p&aacute;gina:</p>
<pre>&lt;?php  class connection { var $dbug=1, $con, $type;
function getType() {global $type;return $this-&gt;type;}
// Constructor del objeto de conexi&oacute;n a la base de datos
function connection($typedb=&quot;MySQL&quot;,$database_name=&quot;template1&quot;)
{ $this-&gt;connection_open ($typedb,$database_name);}
// Apertura de la conexi&oacute;n con la base de datos
function connection_open ($typedb,$database_name) {
$this-&gt;$type=$typedb;
if ($type==&quot;PostgreSQL&quot;) $this-&gt;$con=new postgresql_connection;
elseif ($type==&quot;MySQL&quot;) $this-&gt;$con=new mysql_connection;
else {error_message(&quot;Open:Unkown database type&quot;);exit;}
$this-&gt;$con-&gt;connection_open($database_name); }  }
class mysql_connection { function mysql_connection() {
echo &quot;&lt;h1&gt;La clase mysql_connection a&uacute;n no
est&aacute; implementada.&lt;h1&gt;&quot;;}
function connection_open($database_name) {
echo &quot;&lt;h1&gt;M&eacute;todo connection_open sin implementar.&lt;h1&gt;&quot;;} }
$bd = new connection(&quot;MySQL&quot;,&quot;template1&quot;);  ?&gt;</pre>
<p>Si  el lector est&aacute; acostumbrado a la programaci&oacute;n con objetos este c&oacute;digo  le resultar&aacute; muy familiar. Tenemos una clase principal &quot;connection&quot; que  se encarga de gestionar las conexiones con la base de datos. Cuando  desde nuestro programa queramos acceder a una base de datos, nos  creamos un objeto connection pas&aacute;ndole como par&aacute;metros al constructor  de connection, m&eacute;todo que se llama de forma autom&aacute;tica al crear el  objeto, el tipo de base de datos al que queremos acceder y el nombre de  la base de datos concreta con la que queremos trabajar.</p>
<p>Este  objeto delega en los objetos espec&iacute;ficos de cada base de datos, el del  gestor de base de datos MySQL es &quot;mysql_connection&quot;, la apertura de una  conexi&oacute;n, las peticiones SQL etc. Esta t&eacute;cnica de utilizar objetos que  delegan el trabajo final en otros es muy utilizada en lenguajes que  carecen de herencia, mecanismo por el que una clase hereda toda la  informaci&oacute;n de estado y m&eacute;todos de la clase de a que hereda. PHP3 en  sus primeras versiones no ten&iacute;a soporte para herencia por lo que me vi  obligado a utilizar esta t&eacute;cnica. En la actualidad PHP ya soporta  herencia, aunque no m&uacute;ltiple. Y no, todas las reglas de encapsulaci&oacute;n  p&uacute;blica y privada no est&aacute;n implementadas. Y hay que tener cuidado con  algo que nos puede dar muchos quebraderos de cabeza: al crear un objeto  de una clase B que hereda de una clase A, se llama de forma autom&aacute;tica  al constructor de la clase B pero no al de su padre, la clase A.</p>
<p>Sobre  la sintaxis de PHP, es muy similar a la de C o C++. Quiz&aacute;s lo m&aacute;s  destacado ocurre a nivel sem&aacute;ntico: el tipado es muy poco estricto,  algo t&iacute;pico en los lenguajes &quot;script&quot;, y cuando creamos una variable en  ella podemos meter el tipo de datos que queramos. Esto es muy flexible  y c&oacute;modo para el desarrollador, aunque los errores que se cometen  pueden ser mucho m&aacute;s graves y dif&iacute;ciles de corregir. Las posibilidades  del interprete para detectar incompatibilidades entre variables se  reducen mucho y puede ocurrir cosas extra&ntilde;as en determinadas  circunstancias si no tenemos cuidado.</p>
<p>Sobre el c&oacute;digo de este  ejemplo en concreto, tenemos dos clases. La definici&oacute;n de una clase es  hace con la palabra clave &quot;class&quot; seguida del nombre de la clase. Entre  llaves desarrollamos toda la descripci&oacute;n de la clase, sus variables y  m&eacute;todos. Dentro de un m&eacute;todo de la clase (function) se pueden acceder  otras partes de la clase por medio del puntero &quot;$this&quot;. Por ejemplo,  para acceder desde el m&eacute;todo &quot;connection_open&quot; a la variable de la  clase &quot;$type&quot; lo hacemos con &quot;$this-&gt;$type&quot;.</p>
<p>Si guardamos  esta clase en un fichero, por ejemplo &quot;ejemploDB.php&quot;, cuando accedamos  a este fichero a trav&eacute;s del servidor de web, este llamar&aacute; de nuevo al  interprete de PHP al ver que la extensi&oacute;n del fichero es &quot;php&quot;. El  interprete de PHP analizar&aacute; el c&oacute;digo y ejecutar&aacute; la instrucci&oacute;n &quot;:</p>
<pre>$bd = new connection(&quot;MySQL&quot;,&quot;template1&quot;);</pre>
<p>Con  ello se crear&iacute;a un nuevo objeto de la clase &quot;connection&quot;. Al crearse se  llama de forma autom&aacute;tica al constructor &quot;function connection&quot; que a su  vez llama al m&eacute;todo &quot;connection_open&quot;. Este m&eacute;todo crea un nuevo objeto  de la clase &quot;mysql_connection&quot; ($con) el cual llama de forma autom&aacute;tica  a su constructor &quot;function mysql_connection&quot; el cual env&iacute;a la cadena  HTML &quot;&lt;h1&gt;La clase mysql_connection a&uacute;n no est&aacute;  implementada.&lt;h1&gt;&quot;. Desde el m&eacute;todo &quot;connection_open&quot; de  &quot;connection&quot; se llama a &quot;connection_open&quot; del objeto &quot;$con&quot;, que es de  la clase mysql_connection, lo que provoca que se imprima otra cadena  HTML: &quot;&lt;h1&gt;M&eacute;todo connection_open sin implementar.&lt;h1&gt;.&quot;.  Tras esta &uacute;ltima invocaci&oacute;n el programa finaliza y se env&iacute;a el  resultado al servidor de web, el cual reenv&iacute;a estos datos al cliente.  En la figura 2 podemos ver el resultado de dicha ejecuci&oacute;n.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/2.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. Características de PHP</title>
		<link>http://www.lawebera.es/manuales/php/2-2.php</link>
		<comments>http://www.lawebera.es/manuales/php/2-2.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 21:13:01 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/2-2.php</guid>
		<description><![CDATA[Vamos a ver qu&#233; cosas se pueden hacer en PHP con el uso de las librer&#237;as disponibles en este lenguaje.]]></description>
			<content:encoded><![CDATA[<p>Ahora que hemos visto lo sencilo que es <a href="http://www.lawebera.es/manuales/php/2.php">desarrollar con PHP</a> vamos a  ver que cosas podemos hacer con &eacute;l, las <strong>librer&iacute;as</strong> de las que  disponemos. Muchas de estas librer&iacute;as ya est&aacute;n orientadas a <strong>objetos</strong> por  lo que su uso ser&aacute; similar al de este ejemplo. Este ejemplo es el que  utilizaremos durante el curso para ir introduciendo m&aacute;s <strong>conceptos de  PHP</strong> y en particular, para presentar como se trabaja con las bases de  datos MySQL y PostgreSQL.</p>
<p>PHP en cada nueva versi&oacute;n soporta nuevas funcionalidades por lo que  el mejor m&eacute;todo para ver que nuevas librer&iacute;as incluye es cuando  compilamos. Si dentro del directorio con las fuentes de PHP ejecutamos  el comando &quot;configure &#8211;help&quot; nos dar&aacute; informaci&oacute;n de todas las  posibles opciones que tiene PHP al ser compilado y, entre esta  informaci&oacute;n, la de todos los m&oacute;dulos que podemos a&ntilde;adir a PHP si  disponemos de las librer&iacute;as adecuadas. Dentro del manual de PHP  disponemos tambi&eacute;n de una referencia a todas las funciones disponibles.  Ojo que muchas veces es necesario compilar PHP de forma especial para  incluir soporte para una determinada funcionalidad. Por ejemplo, si  queremos acceder desde PHP al gestor de base de datos MySQL, es  necesario que a la hora de compilar PHP incluyamos ests soporte. Para  ello es necesario tener las librer&iacute;as de MySQL instaladas en el  sistema, normalmente en el paquete &quot;dev&quot; de MySQL, y ejecutar  &quot;./configure &#8211;with-mysql&quot; antes de compilar PHP. De esta forma PHP  incluir&aacute; en el m&oacute;dulo generado dicho soporte. En la informaci&oacute;n que  obtenemos con la llamada a la funci&oacute;n &quot;phpInfo()&quot; se incluye informaci&oacute;  n sobre los m&oacute;dulos incluidos. En la figura 3 se puede observar la  informaci&oacute;n referente al m&oacute;dulo MySQL y al GD, que se utiliza para la  creaci&oacute;n de gr&aacute;ficos &quot;al vuelo&quot;.</p>
<p>De esta informaci&oacute;n es importante a versi&oacute;n de API del cliente. Si  esta no es compatible con la del servidor que queramos acceder, no  podremos acceder a este servidor. En este caso tenemos la versi&oacute;n 3.22  que utiliza el protocolo 10 para comunicarse con el servidor MySQL. Si  tuvieramos una versi&oacute;n 3.20 del cliente (la versi&oacute;n de MySQL que se  liber&oacute; con licencia GPL) no podr&iacute;amos acceder a los servidores 3.22 ya  que el cliente utilizar&iacute;a el protocolo de comunicaciones versi&oacute;n 9,  incompatible con la versi&oacute;n 10.</p>
<p>Siempre que se habla de PHP lo primero que se hace es presentar el  gran n&uacute;mero de gestores de <strong>bases de datos</strong> a los que puede acceder.</p>
<ul>
<li>Adabas D</li>
<li>dbm</li>
<li>dBase</li>
<li>filePro</li>
<li>Hyperwave</li>
<li>Informix</li>
<li>InterBase</li>
<li>LDAP</li>
<li>Microsoft SQL server</li>
<li>mSQL</li>
<li>MySQL</li>
<li>ODBC</li>
<li>Oracle</li>
<li>PostgreSQL</li>
<li>Solid</li>
<li>Sybase</li>
</ul>
<p>Pero si este aspecto resulta impresionante no menos el soporte para:</p>
<ul>
<li>Acceso a servidores IMAP</li>
<li>Env&iacute;o de correo con SMTP</li>
<li>Acceso a servidores de FTP</li>
<li>Acceso a SNMP para gesti&oacute;n de redes y equipos</li>
<li>Generaci&oacute;n din&aacute;mica de gr&aacute;ficos y documentos PDF</li>
<li>An&aacute;lisis de documentos XML</li>
<li>Corrector de ortograf&iacute;ai</li>
<li>Genraci&oacute;n de datos en WDDX (Intercambio Web de Datos Distribuidos)</li>
</ul>
<p>Y todo esto ha sido posible gracias a que PHP ha sido dise&ntilde;ado de  forma muy modular y ha sido sencillo seg&uacute;n han sido surgiendo  librer&iacute;as, utilizarlas desde PHP. Toda esta funcionalidad est&aacute; basada  en librer&iacute;as que en su mayor parte no han sido desarrolladas por el  equipo de PHP. La gente de PHP lo que ha implementado han sido os cabos  necesarios para poder acceder a las librer&iacute;as.</p>
<p>A lo largo del curso iremos presentando el uso de algunas de estas  librer&iacute;as, aunque nada detiene al lector de comenzar este aprendizaje.  En el manual de PHP dispone de documentaci&oacute;n abundante sobre todas  estas funciones, su uso y los posibles resultados. Esta entrega la  vamos a finalizar con una descripci&oacute;n de las nuevas caracter&iacute;sticas de  PHP4, versi&oacute;n que utilizaremos a lo largo de todo el curso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/2-2.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. El nuevo PHP 4</title>
		<link>http://www.lawebera.es/manuales/php/2-3.php</link>
		<comments>http://www.lawebera.es/manuales/php/2-3.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 20:02:44 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/2-3.php</guid>
		<description><![CDATA[Cap&#237;tulo informativo sobre las novedades que trae la nueva versi&#243;n de PHP, PHP4.]]></description>
			<content:encoded><![CDATA[<p>La principal novedad de PHP4 es en el interprete del <a href="http://www.lawebera.es/manuales/php/">lenguaje PHP</a>.  Gracias a Zend, desarrollado por Andi Gutmans y Zeev Suraski, se han  logrado aumentos de entre 5 y 10 veces en la velocidad de ejecuci&oacute;n de  p&aacute;ginas PHP. Este nuevo rendimiento le ha puesto por delante de <a href="http://www.lawebera.es/manuales/asp/">ASP</a>, la  tencolog&iacute;a de Microsoft, por lo que le va a permitir competir  directamente con ASP en la plataforma de Microsoft. La plataforma de  desarrollo Apache+PHP en entornos Microsoft est&aacute; logrando ya  rendimientos superiores a IIS+ASP, por lo que el aumento de su uso en  estas plataformas parece muy probable. Esto significar&aacute; que en el  futuro el desarrollador en plataformas NT, por ejemplo, no se ver&aacute;  obligado al uso de IIS+ASP para el desarrollo de sistemas web, tal y  como hab&iacute;a sucedido hasta ahora. Por otro lado, PHP estaba hasta el  momento pensado b&aacute;sicamente para Apache. Era el &uacute;nico que ten&iacute;a soporte  para tener a PHP como un m&oacute;dulo del servidor. Todos los dem&aacute;s  servidores de web s&oacute;lo pod&iacute;an utilizar a PHP como cgi. En PHP4 se han  a&ntilde;adido al soporte de la API de Apache, el de Netscape (NSAPI), el  soporte para ISAPI ( API de Internet Explorer) y para la API del  servidor de AOL. De esta forma todos estos servidores podr&aacute;n lograr  rendimientos similares a Apache en su ejecuci&oacute;n de PHP.</p>
<p>Adem&aacute;s del aumento en rendimiento en lo referente al soporte de  objetos en PHP, la sobrecarga de objetos se ha mejorado. De esta forma  se ha a&ntilde;adido la posibilidad de m&eacute;todos polim&oacute;rficos, m&eacute;todos que seg&uacute;n  desde que referencia a un objeto se llamen se comportan de una forma o  de otra. Esta caracter&iacute;stica es muy importante para incluir soporte  para acceder a las arquitecturas CORBA y COM.</p>
<p>Otra nueva caracter&iacute;stica de PHP4 es que se puede compilar para  soportar hebras, algo que no era posible en PHP3. La principal ventaja  que podemos obtener de esta funcionalidad es el uso de librer&iacute;as que  utilicen hebras. Y en la mayor&iacute;a de las implementaciones de CORBA esto  es as&iacute;. Quiz&aacute;s pase ya poco tiempo antes de poder acceder al mundo  CORBA desde PHP.</p>
<p>Para el desarrollador con PHP4 se incluye un depurador lo que nos  evitar&aacute; muchos quebraderos de cabeza con PHP. Podremos seguir con mayor  profundidad esos errores misteriosos que ocurren en estos lenguajes  poco tipados. El nuevo interprete de PHP es capaz de liberar los  recursos que reservemos de forma autom&aacute;tica con lo que nos podremos  olvidar de liberarlos. S&iacute;, esto es algo similar al recolector de basura  de Java. Habr&aacute; que hacer pruebas para ver que tal funciona porque en el  caso de Java, muchas veces da m&aacute;s dolores de cabeza de los que te  ahorra. En la referencia [2] se puede acceder a un informe realizado  por Javier Carretero sobre PHP4, el m&aacute;s completo que he encontrado en  Internet.</p>
<h2>Conclusiones </h2>
<p>Esperamos que con esta primera entrega del <a href="http://www.lawebera.es/manuales/php/">Tutorial de PHP</a> el lector  haya recibido la motivaci&oacute;n suficiente como para empezar a utilizarlo.  Si algo caracteriza a PHP es su sencillez: en pocos d&iacute;as se puede  llegar a ser un desarrollador de PHP bastante profesional.</p>
<p>En las pr&oacute;ximas entregas del curso se ir&aacute;n presentando las librer&iacute;as  principales de PHP, las virguer&iacute;as que se pueden acceder con muy poco  c&oacute;digo y las noticias que aparezcan dentro del mundo de PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/2-3.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. librería PHPLIB (I)</title>
		<link>http://www.lawebera.es/manuales/php/3.php</link>
		<comments>http://www.lawebera.es/manuales/php/3.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 19:24:21 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/3.php</guid>
		<description><![CDATA[Programar aplicaciones utilizando PHP. Uso de la librer&#237;a PHPLIB.]]></description>
			<content:encoded><![CDATA[<p>Después de la primera entrega de  esta sección donde <a href="http://www.lawebera.es/manuales/php/2-3.php">presentamos PHP4</a>, vamos a ponernos ya a <a href="http://www.lawebera.es/manuales/php/2.php">programar  aplicaciones utilizando PHP</a>. Y PHP no es más que un lenguaje y un  conjunto de librerías orientadas hacia el desarrollado de aplicaciones  web. Todo lo que podemos hacer con PHP lo podríamos hacer exactamente  igual con otro lenguaje utilizando CGI, pero la complejidad y tiempo de  desarrollo serían mucho mayores y su integración con el web mucho menor.</p>
<p>Quizás  podamos ver PHP como una extensión de <a href="http://www.lawebera.es/manuales/html/">HTML</a> del lado del servidor.  Recordemos que en principio el lenguaje PHP se mezcla con HTML en una  página HTML con extensión &#8220;.php&#8221;. Es precisamente esta extensión la que  alerta al <a href="http://www.lawebera.es/de0/hosting.php">servidor de web</a> para que antes de entregar la página al  cliente, se la pase al interprete de PHP para que ejecute las partes  PHP y envíe al cliente el HTML y los resultados de las partes PHP. A lo  largo de esta entrega nos vamos a centrar en describir PHPLIB, una  librería que nos va a permitir de forma sencilla poder trabajar con  diferentes bases de datos de forma transparente, poder gestionar  sesiones de una forma sencilla y llevar un control de acceso muy  flexible basado en bases de datos. <strong>PHPLIB</strong> también proporciona clases,  está basada en objetos, para gestionar plantillas y crear HTML desde  PHP. Como veremos uno de los problemas fundamentales con lenguajes como  PHP, donde se mezcla el código PHP con el código HTML, es que no está  bien delimitado el campo del diseñador HTML y del programador y que el  código resultante puede ser complejo de entender y por o tanto, muy  complicado de mantener. Las plantillas permiten que el código HTML esté  totalmente fuera del código PHP con lo que el resultado final es mucho  más flexible y mantenible.</p>
<p><strong>PHPLIB es una librería GPL</strong> y se  puede obtener en la referencia [1]. Su instalación es un tanto compleja  ya que toda su funcionalidad principal utiliza base de datos. Por lo  tanto lo primero es tener una base de datos funcionando en el sistema.  Nos vamos a centrar en MySQL pero la instalación sería muy similar para  PostgreSQL o MS Access.</p>
<p>Una vez que hayamos obtenido el  &#8220;tar.gz&#8221; de la librería la descomprimimos en un directorio (tar xvfz  phplib-7.2.tar.gz ) y pasamos a instalarla. La estructura de  directorios resultante es:</p>
<pre>CHANGES  COPYING  HELP    README  VERSION  pages  stuff
COMMIT  CREDITS  Makefile  TODO   doc     php  unsup</pre>
<p>La  documentación de la librería es de los más completa y se encuentra en  el directorio &#8220;doc&#8221;. Las clases que componente la librería se  encuentran en el directorio &#8220;php&#8221; y los &#8220;scripts&#8221; de creación de base  de datos y tablas necesarios para el funcionamiento de la librería y el  soporte de LDAP se encuentra en el directorio &#8220;stuff&#8221;. En el directorio  &#8220;pages&#8221; tenemos unos sencillos ejemplos para comenzar a trabajar con la  librería y en &#8220;unsup&#8221; tenemos utilidades de las que no se da soporte,  es decir, que pueden ser útiles pero que no son parte de la  distribución oficial. Sobre la licencia como ya dijimos es software GPL  y por lo tanto dentro de &#8220;COPYING&#8221; tenemos la querida licencia GPL.</p>
<p>La  guía de instalación rápida nos cuenta en 10 pasos como instalar la  librería. Como ya dijimos lo primero es tener una base de datos  funcionando en el sistema. Quizás puede parecer un requisito excesivo  pero los servidores web sin base de datos serán una especie en  extinción en el futuro cercano. Si tenemos MySQL instalado todo va a  ser sencillo. Accedemos al directorio &#8220;stuff&#8221; y ejecutamos:</p>
<pre>mysqladmin -u root create phplib  mysql -u root
&lt; create_database.mysql</pre>
<p>Con  ello creamos una base de datos para PHPLIB y dentro de ella la poblamos  con una serie de tablas. En estas tablas es donde PHPLIB guarda toda la  información de sesiones y control de accesos. Una vez que ya tenemos la  infraestructura de base de datos preparada hay que indicar a PHP que en  todas las páginas incluya el núcleo de PHPLIB. Se puede evitar hacer  esto pero es muy cómodo tener toda esta funcionalidad de forma  automática en nuestras páginas PHP, y este núcleo es bastante reducido.  Esto lo vamos a lograr accediendo al fichero de configuración de PHP,  normalmente &#8220;/etc/php.ini&#8221;, e incluir en la línea que comienza con  &#8220;auto_prepend_file&#8221; la localización del fichero &#8220;prepend.php3&#8243; que se  encuentra dentro del directorio &#8220;php&#8221; de PHPLIB. De esta forma el  interprete de PHP incluye PHPLIB en todas las páginas PHP. Una vez  hecho esto solo nos queda acceder al fichero &#8220;local.inc&#8221; y especificar  los datos necesarios en la clase &#8220;DB_Example&#8221; para que PHPLIB puede  acceder a la base de datos. El contenido de esta clase es:</p>
<pre>class DB_Example extends DB_Sql {var $Host  = "localhost";
var $Database = "phplib"; var $User = "root";
var $Password = ""; }</pre>
<p>Tenemos  que especificar en que máquina está corriendo la base de datos, como se  llama la base de datos en la que se van a almacenar los datos de  PHPLIB, y un usuario y clave para acceder a esa base de datos. La clase  DB_Sql es una abstracción del acceso a la base de datos, es decir, que  a través de esta clase podemos acceder de forma idéntica a varios tipos  de bases de datos diferentes. En concreto en la versión actual de  PHPLIB nos encontramos implementaciones de DB_Sql para las siguientes  bases de datos:</p>
<pre>db_msql.inc: msql   db_mssql.inc: MS SQL Server
db_mysql.inc: MySQL
db_oci8.inc, db_oracle.inc: ORACLE   db_odbc.inc: ODBC
db_pgsql.inc: PostgreSQL   db_sybase.inc: Sybase</pre>
<p>Si  basamos nuestros desarrollos en PHPLIB y DB_Sql la migración de un  sistema de bases de datos será trivial: sólo habrá que traspasar los  datos y cambiar la clase con la que se accede a la base de datos. Todo  nuestro código será idéntico.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/3.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. PHPLIB. Control de sesiones y de identidad de usuarios</title>
		<link>http://www.lawebera.es/manuales/php/3-1.php</link>
		<comments>http://www.lawebera.es/manuales/php/3-1.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 19:01:30 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/3-1.php</guid>
		<description><![CDATA[Uso de la librear&#237;a PHPLIB para el control de sesiones y de identidad de usuarios en PHP.]]></description>
			<content:encoded><![CDATA[<h2>PHPLIB. Control de sesiones</h2>
<p>Ya en este punto estamos en disposición de utilizar la <a href="http://www.lawebera.es/manuales/php/3.php">librería  PHPLIB</a>. Para ello lo mejor es poner el directorio &#8220;pages&#8221; de la  distribución en algún lugar desde el que el servidor de web pueda  acceder a él y a través de un navegador acceder a la página  &#8220;index.php3&#8243;.</p>
<p>Si prueba el lector a recargar la página verá que el contador que  aparece va aumentando. Lo que está ocurriendo es que la primera vez que  se accedió a esta página se creó una &#8220;<a href="http://www.lawebera.es/manuales/php/5-2.php">cookie</a>&#8221; para el control de la  sesión. A partir de este momento está &#8220;cookie&#8221; con el identificador de  sesión es enviado al servidor de web por el cliente cada vez accede a  la página permitiendo el control del estado de la sesión. De hecho este  control se realiza utilizando la base de datos &#8220;phplib&#8221; que creamos  anteriormente. Si vemos las tablas que hay en la base de datos &#8220;phplib&#8221;  encontramos:</p>
<pre>active_sessions   active_sessions_split
auth_use   auth_user_md5   db_sequence</pre>
<p>En la tabla &#8220;active_sessions&#8221; es donde se almacena la información de  sesión y cada vez que se crea una nueva sesión, se crea un registro en  esta tabla para su control. Supongamos que queremos controlar el acceso  a un conjunto de páginas por nuestros clientes. Con PHPLIB es tan  sencillo como incluir al comienzo de cada página con control de sesión  la llamada:</p>
<pre>page_open(array("sess" =&gt; "Sesión de control"));</pre>
<p>De esta forma PHPLIB verifica si el usuario tiene ya creada la  &#8220;cookie&#8221;. Si no la tiene se la crea y si la tiene nos permite acceder a  todos los datos de la sesión. Gracias al control de sesiones podemos  almacenar diferentes variables asociadas a esta sesión. Desde el  momento que se abre una sesión, se abren todas las variables de dicha  sesión. Para asociar una variable a una sesión utilizamos una llamada  de PHPLIB:</p>
<pre>$sess-&gt;register("s");</pre>
<p>Al final de una página con control de sesión, tenemos que realizar  una llamada a PHPLIB para cerrar la sesión. En esta llamada todas las  variables asociadas a la sesión se guardan para que no se pierdan:</p>
<pre>page_close();</pre>
<p>Es por todos conocido lo poco que gustan las &#8220;cookies&#8221; a la gente  por el ataque hacia su privacidad que supone. Con PHPLIB el control de  sesiones se puede realizar también utilizando el método GET de envío de  datos, es decir, adjuntando a la URL de acceso a la página el  identificador de la sesión. Esto se controla si en la página con  control de sesiones ponemos todos los enlaces a otras páginas de la  siguiente forma:</p>
<pre>$sess-&gt;purl("showoff.php3");</pre>
<p>Ya hemos visto pues una de las principales ventajas de utilizar  PHPLIB: el sencillo control de sesiones. con este control el  implementar una bolsa de la compra donde se vayan almacenando todos los  artículos de una compra es trivial. O el almacenamiento de una barra de  navegación con todas las páginas por las que ha ido accediendo el  usuario.</p>
<h2>PHPLIB. Control de Identidad de Usuarios</h2>
<p>Junto con el control de sesiones es el control de acceso a páginas  una de las principales necesidades en las aplicaciones web. Y de nuevo  con PHPLIB tenemos solucionado de forma sencilla este control. Es  cierto que con Apache tenemos mecanismos para el control de acceso a  páginas, pero es un control de acceso o no acceso. Normalmente  necesitamos ir más allá. Necesitamos que según la persona que acceda  dar acceso a unas partes u otras, poder crear grupos de usuarios con  privilegios etc.</p>
<p>Además PHPLIB asocia este control de identidad de usuarios al  control de sesiones, algo que nos permite asociar de forma automática  una sesión a un usuario identificado. Cuando queremos que una página  solo pueda ser accedida por un usuario identificado incluimos en la  primera línea de esta página:</p>
<pre>page_open(array("sess" =&gt; "Example_Session",
"auth" =&gt; "Example_Auth",</pre>
<pre>"perm" =&gt; "Example_Perm", "user" =&gt; "Example_User"));</pre>
<p>Es en la tabla &#8220;auth_user&#8221; de la base de datos &#8220;phplib&#8221; donde se  almacena toda la información sobre los usuarios. Y en esta tabla  también se incluye un campo &#8220;perms&#8221; donde se pueden detallar los  permisos que tiene un usuario.</p>
<p>Supongamos que hay una parte de administración a la que sólo pueden  acceder los usuarios con permiso de administrador. Para ello en el  campo &#8220;perms&#8221; del registro del usuario debe aparecer &#8220;admin&#8221;. Con  PHPLIB lo único que hay que hacer para realizar este control es incluir  la llamada:</p>
<pre>$perm-&gt;check("admin");</pre>
<p>Si el usuario no está aún autenticado se le presentará una página  para que inserte un identificador y una clave de entrada.</p>
<p>En el ejemplo inicial de PHPLIB el identificador es &#8220;kris&#8221; y la  clave es &#8220;test&#8221;. Una vez introducidos podemos volver a acceder a esta  página y ya se nos volverá a pedir el identificador.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/3-1.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. PHPLIB (II)</title>
		<link>http://www.lawebera.es/manuales/php/4.php</link>
		<comments>http://www.lawebera.es/manuales/php/4.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 18:46:30 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/manual-php.-phplib-ii.php</guid>
		<description><![CDATA[Uso de la librer&#237;a PHPLIB para la implementaci&#243;n de plantillas o templates.]]></description>
			<content:encoded><![CDATA[<h2>PHPLIB. Plantillas</h2>
<p>Ya se ha comentado que uno de los  principales problemas a la hora de <a href="http://www.lawebera.es/manuales/php/2.php">programar con PHP</a>, o cualquier otro  lenguajes que mezcle <a href="http://www.lawebera.es/manuales/html/">HTML</a> y el código, es que el código final de las  páginas tiene mezclado los datos a presentar y el código.</p>
<p>Este  mezcla impide además un correcto trabajo entre los desarrolladores de  código y los creadores de páginas HTML y diseñadores gráficos. Para  resolver este problema lo mejor es intentar independizar totalmente el  código PHP y el código HTML. Este objetivo es bastante lioso de lograr  a menos que se ataque el problema de una forma general y se sea muy  estricto a la hora de desarrollar las páginas.</p>
<p>Los beneficios  logrados por esta separación son muy grandes incluyendo por ejemplo el  cambio de temas según el tipo de usuario que acceda al servidor de web,  facilitar la traducción de webs sin tocar para nada el código  facilitando así la internacionalización del código etc.</p>
<p>Dentro  de la <a href="http://www.lawebera.es/manuales/php/3.php">librería PHPLIB</a> nos encontramos con una clase que nos ayuda con este  objetivo: la <strong>clase Template</strong>.</p>
<p>Para ver la potencia del uso de <strong>plantillas</strong> vamos a planter un ejemplo de unsa sencilla página que debe  de controlar el acceso a un web y según el usuario que entre, se debe  de presentar el web en un idioma u otro. La aplicación lo único que  hace es mostrar una serie de datos númericos sobre cotización en bolsa  en euros, por lo que esta información es idéntica para todos los  idiomas.</p>
<p>Para ello podríamos utilizar os mecanismos de  autenticación de la propia PHPLIB. Podríamos crear una nueva tabla en  la base de datos asociando identificador de usuario e idioma y  tendríamos que preparar los diferentes webs.</p>
<p>Supongamos que  inicialmente tenemos dos idiomas: español e inglés. Podemos crear dos  directorios, uno con las plantillas en español y el otro con las  plantillas en inglés. El código podría empezar de la forma:</p>
<pre>page_open(array("sess" =&gt; "Example_Session", "auth" =&gt;
"Example_Auth", "perm" =&gt; "Example_Perm", "user" =&gt;
"Example_User"));

// Template no es del núcleo de PHPLIB por lo que hay que
// incluir esta clase de forma explícita.  

include("template.inc");
$plantillas = "/home/acs/public_html/plantillas";
$plantillasEspañol = $plantillas."/español";
$plantillasIngles= $plantillas."/ingles";

// Ya sabemos que usuario es $auth[uname
// La función miraIdioma accedería a la base de datos
// para ver que idioma le corresponde a un usuario.
$idioma=miraIdioma ($auth[uname]);
if ($idioma=="español") $t=new Template($plantillasEspañol);
elseif ($idioma=="ingles") $t=new Template($plantillasIngles);
else {echo "Error en la selección de idioma.";exit;}

// Tenemos dos plantillas: una para la cabecera y otra
// para el cuerpo

$t-&gt;set_file(array( "cabecera" =&gt; "cabecera.ihtml",
"cuerpo"  =&gt; "cuerpo.ihtml"));

// Suponemos que existe una función que nos devuelve
// los valores a presentar.

$valores = obtenValores();  $fecha = date("d/m/a");

// Cada plantilla puede contener un número de variables cuyo
// valor se controla desde el código a través de Template

$t-&gt;set_var(array("Fecha"   =&gt; $fecha,
"Valores" =&gt; $valores));  $t-&gt;parse("OUT",
array("cabecera", "cuerpo"));   

/* imprimimos OUT */

$t-&gt;p("OUT");</pre>
<p>Todas  las plantillas asociadas a un objeto Template han de encontrarse en un  directorio. En nuesto ejemplo según el idioma se cogen del directorio  en inglés o del español. Una vez asignado el directorio a través de la  función &#8220;set_file&#8221; asociamos plantillas a nombres. De esta forma en  nuestro programa utilizaremos los nombres aquí indicados para  referirnos a la plantilla a utilizar. En este sencillo ejemplo sólo hay  dos plantillas &#8220;cabecera.ihtml&#8221; y &#8220;cuerpo.ihtml&#8221;.</p>
<p>Aparte de  definir las plantillas con las que vamos a trabajar hay que definir las  variables que hay que sustituir en dichas plantillas. Cualquier  ocurrencia de una variable dentro de una plantilla es sustituido por el  valor que le asociamos a través de &#8220;set_var&#8221;. En nuestro caso la  varible &#8220;{Fecha}&#8221; se sutituye por &#8220;$fecha&#8221; y &#8220;{Valores}&#8221; por $valores.</p>
<p>Por ejemplo, el contenido de &#8220;cabecera.ihtml&#8221; podría ser:</p>
<pre>&lt;html&gt;&lt;head&gt;&lt;title&gt;Valores de cotización&lt;title&gt;
&lt;head&gt;&lt;body&gt;Fecha de los valores: {Fecha}</pre>
<p>El  valor de &#8220;{Fecha}&#8221; será sustituido de forma automática cuando  ejecutemos la función de sustitución de valores &#8220;parse&#8221;. El resultado  lo almacenamos en la variable &#8220;OUT&#8221; que imprimimos finalmente con la  función &#8220;p()&#8221;.</p>
<p>Las plantillas que se incluyen en PHPLIB  tienen una funcionalidad más amplia y sugerimos al lector una lectura  de la documentación de PHPLIB para ver todas sus posibilidades.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/4.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. La cesta de la compra</title>
		<link>http://www.lawebera.es/manuales/php/4-1.php</link>
		<comments>http://www.lawebera.es/manuales/php/4-1.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 18:08:20 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/4-1.php</guid>
		<description><![CDATA[Uso de la librer&#237;a PHPLIB para construir un carro de compra. Utilizaci&#243;n de cookies.]]></description>
			<content:encoded><![CDATA[<h2>PHPLIB. Carro de la compra</h2>
<p>Ya dijimos que gracias al control de sesiones ser&iacute;a trivial  construir una cesta de la compra. Pues <a href="http://www.lawebera.es/manuales/php/4.php">PHPLIB</a> incluye una clase llamada  &quot;Cart&quot; que es precisamente esto, una cesta de la compra.</p>
<p>El comercio electr&oacute;nico siempre obliga a que a la hora de comprar el  cliente vaya teniendo su carro de compra con los productos que ha  ido adquiriendo. El mecanismo por el que se suele mantener este estado  del cliente es mediante <a href="http://www.lawebera.es/manuales/php/5-2.php">cookies</a>, aunque ya vimos que PHPLIB pod&iacute;a  evitar el uso de &quot;cookies&quot; utilizando el m&eacute;todo GET.</p>
<p><strong>La cesta de la compra en PHPLIB</strong> es un conjunto de art&iacute;culos que se  almacenan en la base de datos. PHPLIB nos proporciona una API sencillo  para a&ntilde;adir, consultar o borrar la lista de art&iacute;culos en la bolsa de la  compra. Para crear nuestra cesta de la compra necesitaremos en general  realizar una nueva clase de cesta de la compra basada en &quot;Cart&quot;,  principalmente para controlar la visualizaci&oacute;n de los productos, tal y  como se muestra a continuaci&oacute;n:</p>
<pre>class Mi_Cesta extends Cart {
var $classname = &quot;Mi_Cesta&quot;;
// Base de datos donde guardamos los art&iacute;culos
var $database_class = &quot;DB_Article&quot;;
var $database_table = &quot;articles&quot;;
var $db;
var $sum = 0;  function show_cart_open() {
printf(&quot;&lt;table class=cart_table&gt;n&quot;);
$this-&gt;sum = 0; }
function show_cart_close() {
printf(&quot;&lt;/table&gt;n&quot;);
printf(&quot;That's a total of %s.n&quot;, $this-&gt;sum);}
function show_item($art, $num) {
if (!is_object($this-&gt;db)) {
$class    = $this-&gt;database_class;
$this-&gt;db = new $class; }
$query = sprintf(&quot;select * from %s where artid = '%s'&quot;,
$this-&gt;database_table,   $art);
$this-&gt;db-&gt;query($query);
while($this-&gt;db-&gt;next_record()) {
printf(&quot; &lt;tr class=cart_row&gt;n
&lt;td class=cart_cell&gt;%s&lt;/td&gt;n&quot;,
$this-&gt;db-&gt;Record[&quot;name&quot;]);
printf(&quot;  &lt;td class=cart_cell&gt;%s&lt;/td&gt;n&quot;,
$this-&gt;db-&gt;Record[&quot;price&quot;]);
printf(&quot;  &lt;td class=cart_cell&gt;%s&lt;/td&gt;n&quot;,
$num); $rowsum = $num * $this-&gt;db-&gt;Record[&quot;price&quot;];
$this-&gt;sum += $rowsum;
printf(&quot;  &lt;td class=cart_cell&gt;%s&lt;/td&gt;n&quot;,
$rowsum); printf(&quot; &lt;tr&gt;n&quot;);} }  }</pre>
<p>Para utilizar la clase &quot;Cart&quot; vamos a necesitar crear una tabla m&aacute;s  donde se encuentren la descripci&oacute;n de todos los art&iacute;culos que vendamos  en nuestra tienda. Esta tabla la podemos crear dentro de una base de  datos propia para cada uno de nuestros clientes, base de datos que  tambi&eacute;n deber&aacute; tener la informaci&oacute;n de &quot;active_sessions&quot; y &quot;auth_user&quot;.</p>
<p>Un ejemplo sencillo podr&iacute;a ser:</p>
<pre># # Estructura de la tabla de 'articles' #
CREATE TABLE articles (  name text, price float(8,2),
artid int(11) DEFAULT '0' NOT NULL auto_increment,
PRIMARY KEY (artid)  );</pre>
<p>En la documentaci&oacute;n de PHPLIB se encuentran todos los detalles  necesarios para un uso completo de esta clase. Su descripci&oacute;n completa  desbordar&iacute;a el espacio del que disponemos para este art&iacute;culo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/4-1.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP. PHPLIB. HTML Widgets</title>
		<link>http://www.lawebera.es/manuales/php/4-2.php</link>
		<comments>http://www.lawebera.es/manuales/php/4-2.php#comments</comments>
		<pubDate>Tue, 10 Apr 2007 17:43:33 +0000</pubDate>
		<dc:creator>Verónica Milán</dc:creator>
				<category><![CDATA[Programación en PHP]]></category>

		<guid isPermaLink="false">http://www.lawebera.es/manuales/php/4-2.php</guid>
		<description><![CDATA[Uso de la librear&#237;a PHPLIB de PHP. Uso de HTML Widgets]]></description>
			<content:encoded><![CDATA[<h2>HTML Widgets </h2>
<p>PHPLIB incluye tambi&eacute;n un conjunto de clases para facilitar la  creaci&oacute;n de c&oacute;digo HTML. Por un lado con Sql_Query podemos construir  <a href="http://www.lawebera.es/manuales/html/interact/forms.html">formularios HTML</a> a partir de los cuales hacer peticiones SQL a una base  de datos.</p>
<p>Con Table podemos construir <a href="http://www.lawebera.es/manuales/html/struct/tables.html">tablas HTML</a> de una forma sencilla, muy  &uacute;til para presentar el contenido de matrices de datos y de resultados  de consultas a una base de datos.</p>
<p>Menu es un widget que a partir de un &aacute;rbol genera un men&uacute; jer&aacute;rquico  con enlaces que se puede utilizar como <a href="http://www.lawebera.es/de0/menu-navegacion.php">barra de navegaci&oacute;n</a>. De esta  forma se puede facilitar mucho la creaci&oacute;n de este tipo de barras de  navegaci&oacute;n, que siempre son muy engorrosas de mantener y que, en muchos  casos, llevan a los dise&ntilde;adores web al uso de marcos (frames) en sus  p&aacute;ginas.</p>
<p>OOHForms es un widget para la construcci&oacute;n de formularios con la  ventaja de que puede utilizar <a href="http://www.lawebera.es/manuales/javascript/">Javascript</a> y SSI para comprobar que los  valores de los campos del formulario son correctos. Antes de enviar el  formulario se pueden chequear los valores que los campos del  formulario, evitando as&iacute; el env&iacute;o de datos que desde su origen sus  err&oacute;neos.</p>
<p>Por &uacute;ltimo existen dos &uacute;ltimos widget: &quot;tpl_form&quot; para la  construcci&oacute;n de formularios utilizando OOHForms pero a un nivel de  abstracci&oacute;n mayor (el objeto es una caja negra de la que podemos  obtener datos, pero no sabemos como se obtienen) y Tree que permite  representar en HTML estructuras de datos complejas en &aacute;rbol como  subdirectorios.</p>
<h2>Resumen de PHPLIB </h2>
<p>Os hemos  presentado <a href="http://www.lawebera.es/manuales/php/3.php">PHPLIB</a>, una librer&iacute;a orientada a objetos que facilita en  gran medida las necesidades m&aacute;s b&aacute;sicas a la hora de <a href="http://www.lawebera.es/manuales/php/2.php">montar un sitio  web basado en PHP</a>: control de sesiones y de identidad. Junto a estas  necesidades b&aacute;sicas PHPLIB nos ofrece tambi&eacute;n clases para programar  nuestros sitios utilizando plantillas lo facilita el trabajo en  paralelo de desarrolladores PHP y creadores de p&aacute;ginas HTML y  dise&ntilde;adores gr&aacute;ficos.</p>
<p>Hemos visto tambi&eacute;n como PHPLIB no se ha olvidado del comercio  electr&oacute;nico y entre sus objetos incluye una cesta de la compra  integrada con el control de sesiones y de autenticaci&oacute;n. Esto nos va a  permitir montar tiendas virtuales en Internet utilizando PHP con un  esfuerzo m&iacute;nimo. Por &uacute;ltimo PHPLIB tambi&eacute;n contiene un conjunto de  widgets que nos liberan de tareas tan arduas como chequear los valores  de un formulario o la presentaci&oacute;n en HTML de complejas estructuras en  &aacute;rbol.</p>
<h3> Referencias </h3>
<ul>
<li>[1] <a href="http://phplib.netuse.de/">http://phplib.netuse.de</a>: Librer&iacute;a PHPLIB</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lawebera.es/manuales/php/4-2.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 10/19 queries in 0.014 seconds using disk: basic

Served from: www.lawebera.es @ 2012-02-08 08:28:31 -->
