Está en la página 1de 5

DESARROLLO Especial PHP

Herramientas y Tcnicas para PHP en Linux

PROGRAMACIN EN PHP
PHP se est convirtiendo en una herramienta esencial para todo menos para los sitios web ms sencillos. Este mes vamos a examinar a PHP para entornos Linux. POR DAVID SKLAR

HP es ideal tanto para desarrollar un pequeo sitio web con un libro de visitas que reciba unos seis visitantes a la semana, como para un sitio web de alto rendimiento con millones de visitantes diarios. Este lenguaje de programacin de cdigo abierto posee una pendiente de aprendizaje bastante suave para los programadores nefitos y para los pequeos proyectos, pero tambin tiene potencia, flexibilidad y una comunidad de desarrolladores que lo hacen ideal para programar cualquier proyecto que surja. El artculo de portada de este mes le echa un vistazo al mundo de PHP. En los posteriores mostraremos cmo encontrar cdigo PHP en archivos en lnea y analizaremos con detalle el desarrollo de PHP con el IDE de cdigo abierto Eclipse. El artculo final examina la librera de componentes eZ para PHP. En primer lugar comenzaremos con una introduccin a PHP. Si ya se tiene experiencia con este lenguaje, probablemente el lector desee saltar a la entrega siguiente , pero si est buscando informacin bsica sobre la programacin en PHP, a continuacin podr encontrar una introduccin prctica. Esperamos que le sea de su agrado el tema de portada dedicado a la programacin en PHP.

Misin completada!, pero qu aburrida. Cuando se le suministra un fichero para su proceso, PHP slo presta atencin a los trozos de cdigo que estn incluidos entre las etiquetas de comienzo y fin. La etiqueta de comienzo es <?php, y la de fin ?>. As que un programa de Hola Mundo! ms centrado en PHP sera algo ms parecido al cdigo que aparece en el Listado 1, que hay que guardar en un fichero denominado hola.php en un servidor web con soporte para PHP. Cuando se visite esa pgina, se ver un formulario con:
Cmo te llamas? ____________________ [Adelante!]

Este sencillo ejemplo ilustra muchos de los principios bsicos de PHP.

Reglas de PHP
La regla cero es que hay una excepcin al resto de las dems reglas. PHP tiene aproximadamente y como mnimo 127 millones de parmetros de configuracin diferentes, opciones, directivas y otras formas de cambiar su comportamiento entre bastidores. Dependiendo de la configuracin establecida, PHP mezclar mensajes de error con la salida, registrar los errores en un fichero de registro, reconocer etiquetas de comienzo y finalizacin alternativas, deshabilitar el acceso a ciertas funciones, se quejar si se intenta crear una cookie tras generar la salida, y har que ciertas extensiones estn o no disponibles. La lista de parmetros de configuracin en el manual de PHP (http://php.net/ini) es un recurso muy valioso en el caso de que el servidor se comporte de manera diferente a como indican los ejemplos que debera comportarse.

Deberemos teclear un nombre y pulsar el botn Adelante!, y a continuacin se podr ver:


Hola, Pepe

(Suponiendo que se haya tecleado Pepe en el campo del formulario).

Hola, PHP
El programa tpico Hola Mundo! en PHP sera:
Hola Mundo!

Simplemente pasndole un fichero a PHP que contenga Hola Mundo!, devolver Hola Mundo!.

ESPECIAL PHP
Tesoros PHP . . . . . . . . . . . . . . . . . . . .43 PHP con Eclipse . . . . . . . . . . . . . . . .46 Componentes eZ . . . . . . . . . . . . . . . .50

38

Nmero 38

WWW.LINUX- MAGAZINE.ES

Especial PHP DESARROLLO

Listado 1: Hola, PHP


01 <?php if (! isset($_POST[quien_eres])) { ?> 02 03 <form method=post action=hola.php> 04 <p>Cmo te llamas?</p> 05 <input type=text name=quien_eres /> 06 <br/> 07 <input type=submit value=Adelante! /> 08 </form> 09 10 <?php } else { 11 12 print Hola, . htmlspecialchars($_POST[quien _eres]); 13 14 ?>

La siguiente regla es que PHP slo se preocupa de lo que aparezca entre <?php y ?>, todo lo que quede fuera de estas etiquetas se enva literalmente a la salida. Los siguientes programas PHP generan la misma salida:
Hola, Mundo Hola, <?php print Mundo ?> <?php print Hola, Mundo ?>

El Servidor Web
La primera regla es que PHP funciona bajo la clida y confortable proteccin de un servidor web. El modelo tpico de ejecucin consiste en la llegada de una peticin al servidor web solicitando una URL, el cual detecta (por medio de coincidencia de patrones, la extensin de los ficheros o algn otro mecanismo) que tiene que procesarla el intrprete de PHP, por lo que el servidor web

traduce esa URL a un fichero particular e invoca al intrprete de PHP indicndole que ejecute el cdigo que se encuentra en el fichero. PHP ejecuta el cdigo y genera una salida, que se enva de vuelta por medio del servidor web al cliente como respuesta a la peticin web solicitada. La Salida Estndar en un programa PHP es una respuesta HTTP. La consola es un navegador web.

<?php print Hola, ?>Mundo

Las etiquetas de comienzo y finalizacin de PHP son totalmente ortogonales con respecto a otras agrupaciones de cdigo, se puede comenzar y terminar el modo PHP dentro de un bloque condicional, dentro de definiciones de una funcin, y en casi cualquier otro punto dentro de un programa PHP.

Informacin til
Antes de profundizar ms en el cdigo, resumiremos cierta informacin bsica y comentaremos algunos truquillos que harn que la experiencia del lector en PHP sea ms placentera. Primero, squele provecho al manual en lnea en http://php.net. Para cualquier funcin o clase incluida,hay que visitar http://php.net/ <funcin o clase> para obtener la ayuda. Por ejemplo, si se siente curiosidad por lo que hace la funcin str_split(), teclee http://php.net/str_split. Si se desea saber qu argumentos necesita la funcin imagecolorallocate(), http://php.net/imagecolorallocate los mostrar. Este es uno de los mejores recursos para los desarrolladores novatos de PHP. Los nombres de las variables comienzan con $. El resto del nombre de la variable puede ser letras, nmeros o el carcter raya (excepto el primer carcter tras $, que no puede ser un nmero). Las cadenas de caracteres se delimitan con y con , y se comportan tal y como se espera que se deben comportar. Todo es literal en las cadenas delimitadas con , a menos que se escapen los caracteres \ o , con el carcter de escape \. Las cadenas delimitadas con comillas dobles soportan la interpolacin de las variables y poseen un rango mayor de caracteres a escapar. Para concatenar dos cadenas se utiliza el punto. Para PHP, las cadenas son simplemente secuencias de bytes. Si se est trabajando con datos no ASCII, comprobaremos la direccin http://php.net/mbstring para aprender ms sobre las extensiones multibytes y las herramientas que se proporcionan para trabajar con las codificaciones multibytes y las secuencias de caracteres. PHP 6 (que se publicar antes que Perl 6) ha revisado drsticamente el soporte de internacionalizacin y la gestin de las cadenas multibytes. Si $alice es un array, entonces $alice[$bob] proporciona el elemento de $alice cuya clave o ndice es el valor que se encuentra en $bob. No hay una diferencia significativa en PHP entre los arrays cuyas claves son completamente nmeros y los arrays cuyas claves son cadenas de caracteres. Otros lenguajes pueden llamarlos arrays, aplicaciones (maps), tablas hash, diccionarios, conjuntos, listas. En PHP son simplemente arrays. PHP proporciona algunos atajos a la hora de trabajar con arrays con claves numricas. Autoasigna las claves 0: $postres= comenzando con array(helado,tarta); significa que $postres[0] es helado y $postres[1] es tarta. Adems, se puede utilizar [] para aadir al final del array. $postres[]= caramelo significa que ahora $postres[2] es caramelo. Si se tienen problemas con la configuracin de PHP o las cosas no salen como se esperan, se puede utilizar la funcin phpinfo(). Slo hay que colocar en el servidor una pgina que contenga nicamente <?php phpinfo(); ?> Visitando la pgina con el navegador se obtendr un volcado que muestra las extensiones que estn cargadas y la configuracin de PHP. No hay que dejar las pginas phpinfo() disponibles al pblico en Internet. Algunos de los parmetros de configuracin que se muestran podran facilitarle la labor a un atacante y permitirle el acceso al servidor. Otra de las herramientas tiles es var_dump(). Si se le pasa cualquier variable a esta funcin, un escalar, un array, lo que sea, mostrar tanto el tipo como el valor de la variable. Es muy til para comprobar de manera rpida una variable en el caso de que se est comportando como no debe. Por ltimo, recurdese que, como normalmente se est viendo en el navegador la salida de PHP, el formato del texto que se est visualizando obedece a las reglas de HTML y no a las del terminal. Si el programa en PHP imprime un grupo de lneas separadas por el carcter salto de lnea, se visualizarn todas seguidas en una nica lnea en el navegador, ya que un simple carcter de salto de lnea (de acuerdo con las reglas de HTML) no causan un salto de lnea.

WWW.LINUX- MAGAZINE.ES

Nmero 38

39

DESARROLLO Especial PHP

Tercero, PHP crea arrays que contienen los datos suministrados externamente para ser utilizados dentro de la aplicacin. Los datos recibidos de un formulario por medio de una peticin POST se encuentran disponibles en un array denominado $_POST (las variables en PHP comienzan con $). El valor suministrado por un elemento del formulario denominado quien_eres se coloca

Cuestiones de Seguridad
En la prctica, los programas implementan diversos grados de autenticacin, control de acceso y filtrado de datos. La gran mayora de los problemas de seguridad de PHP son el resultado de un ataque denominado cross-site scripting. Este ataque se reduce a permitir que la Malvada Alice suba algn contenido a un sitio web inocente (pero mal programado), y que cuando el usuario Bob visite este sitio, el contenido se le enve al usuario Bob y le haga algo malo. Hay tcnicas para protegerse frente a esta clase de ataques (puede leerse ms al final del artculo) pero la funcin htmlspecialchars, utilizada en el Listado 1, se encarga de la mayor parte. Debemos aplicarle esta funcin a cualquier dato externo que no sea de nuestra confianza antes de incluirlo en la salida de una pgina web. La funcin transforma los caracteres que tienen un significado especial en HTML a sus entidades HTML correspondientes; los caracteres que se transforman son &, , < y >. Esto quiere decir que <?php print htmlentitiesU (<script>alert(Hola!);U </script>; ?> hace que el resultado obtenido sea:

en el elemento del array denominado quien_eres. Algunos otros arrays similares son: $_GET: variables de la cadena de consulta $_COOKIE: valores suministrados por una cookie $_SERVER: valores disponibles en el servidor, como la URL actual, el nombre del host, valores de la cabecera HTTP, $_ENV: variables de entorno La funcin isset() del Listado 1 indica si existe el valor de un elemento en el array. En caso afirmativo, supone que el formulario ha sido enviado y continua imprimiendo algunos datos. En un programa real, probablemente habra que comprobar en este punto la longitud de la cadena o su contenido. Cuarto, es increblemente fcil escribir programas PHP inseguros. La tarea que normalmente realiza PHP implica la aceptacin de datos enviados por los usuarios a la pgina web, datos que se manipulan o se muestran posteriormente. Otra forma de describir esta tarea: permitir que cualquier persona del mundo introduzca

datos arbitrarios en la aplicacin y permitir que cualquiera pueda ver los datos que se hayan introducidos. Vase el cuadro Cuestiones de Seguridad para ms informacin acerca de seguridad en PHP.

Dilogo con una Base de Datos


El uso ms comn que se le da a PHP consiste en obtener informacin de un formulario web e introducirla en una base de datos relacional para generar luego pginas web con informacin extrada de la base de datos. En las versiones recientes de PHP, la forma ms fcil de realizar esta tarea es por medio de la extensin PDO, que proporciona una interfaz estndar de acceso sin importar la base de datos que se est utilizando. Lo nico que cambia es la forma de especificar a qu base de datos hay que conectarse, y potencialmente, el dialecto especfico de SQL que se desee utilizar. El Listado 2 es una extensin del ejemplo Hola Mundo en la que los nombres introducidos se almacenen en una base

Listado 2: Hola, Base de Datos


01 <?php 02 // Conexin a la Base de Datos 03 $dbh = new PDO(sqlite:/tmp/guestbook.db) ; 04 // Informa de los errores si hay problemas con la base de datos 05 $dbh->setAttribute(PDO::ATTR_ER RMODE, PDO::ERRMODE_WARNING); 06 07 // Se asegura de que se ha enviado un nombre y que no est vacio 08 if (! (isset($_POST[quien_eres]) && strlen($_POST[quien_eres]))) 09 { ?> 10 <form method=post action=hola-db.php> 11 <p>Cmo te llamas?</p> 12 <input type=text name=quien_eres /> 13 <br/> 14 <input type=submit value=Adelante! /> 15 </form> 16 17 <?php } else { 18 // Imprime el nombre recin 32 $stmt->execute(array($_POST[qu ien_eres], date(c))); 33 } 20 21 // Obtiene de la base de datos otras entradas 22 print Otras entradas:; 23 print <ul>; 24 foreach ($dbh->query(SELECT * FROM article_name_test) as $row) { 25 printf(<li>%s on %s</li>, $row[name], 26 date(F j, Y, strtotime($row[inserted_on])) ); 27 } 28 print </ul>; 29 30 // Inserta el nombre que se acaba de introducir en la base de datos 31 $stmt =$dbh->prepare(INSERT INTO article_name_test (name,inserted_on) VALUES (?, ?)); introducido 19 print Hola, .htmlspecialchars($_POST[quien _eres]) . <br/>;

&lt;script&gt;alert(Hola!);U &lt;/script&gt;
Sin la codificacin de las entidades, el navegador vera <script>alert(Hola!);</script> y tratara el cdigo dentro de la etiqueta <script/> como JavaScript, presentando un pequeo cuadro de dilogo con el mensaje de alerta. Sin embargo, la norma es que se encuentre un cdigo ms malicioso. Con la codificacin de las entidades, el navegador mostrara un < cuando encuentre un &lt;, y un > cuando encuentre un &gt;. Con esto se impide que pueda ejecutarse en el ordenador del usuario Bob ningn cdigo malicioso.

40

Nmero 38

WWW.LINUX- MAGAZINE.ES

Especial PHP DESARROLLO

Listado 3: Salida del Ejemplo XML


01 MyCorgi.com: A Network for Welsh Corgis & Their Owners 02 interstate: For Skaters...By Skaters... 03 You WILL Experience the Day of the Ninja 04 Ballroom Dance Channel Social 05 Youve Got to Hide Your Love Away 06 Loud Old Guys 07 Meet Pete 08 Duke City Fix: The Inside Line 09 on Albuquerque, NM 10 Mahalo Daily

de datos y luego se muestre una lista de ellos tras el nombre introducido. Debemos guardar este programa como hola-db.php para utilizarlo en el ordenador, o bien modificar el valor del elemento action del formulario por el nombre que se le haya dado.

Interaccin con la Base de Datos


Adems de comprobar la longitud del nombre recibido (utilizando strlen()), todo el cdigo nuevo que aparece en este ejemplo tiene que ver con la interaccin de la base de datos. El objeto PDO, creado al comienzo del ejemplo, proporciona el acceso a la base de datos, a la cual se conecta dependiendo del DSN (Data Source Name; Nombre de la Fuente de Datos) proporcionado por el constructor PDO. En este ejemplo se utiliza SQLite, una pequea base de datos basada en ficheros que viene con PHP. SQLite es til para muchas tareas, ya que no requiere instalacin ni software independiente para optimizarla ni la monitorizacin de otros procesos. El DSN del ejemplo proporciona la ruta (/tmp/guestbook.db) que se va a utilizar para la base de datos. Tras conectarse con la base de datos y crear un objeto PDO nuevo, el cdigo llama a $dbh->setAttribute() para establecer el modo de informacin de errores de PDO. El modo PDO::ERRMODE_WARNING es til para las fases de prueba y depuracin, ya que informa de cualquier error que se produzca con la base de datos en la salida estndar de PHP. El resto de la interaccin con la base de datos en el ejemplo se produce tras recibir un nombre vlido. Primero, el mtodo

$dbh->query() se utiliza para obtener algunas filas de la tabla. ste acta como un iterador en PHP, de modo que puede incluirse directamente dentro de un bucle foreach, mientras que la variable del bucle ($row) contiene en cada vuelta una fila del resultado de la consulta realizada. Por defecto, las filas se representan como arrays, pudindo utilizarse los nombres de las columnas como claves del array para acceder a los datos. $row[name] contiene el valor de la columna name de la fila y $row[inserted_on] contiene el valor de la columna inserted_on de la fila. La funcin printf() de PHP funciona igual que su equivalente en C, y de este modo se pueden introducir dinmicamente datos dentro de una cadena de caracteres. La funcin strtotime() convierte una marca de tiempo ISO procedente de la base de datos al formato de marca de tiempo UNIX, y la funcin date() utiliza la cadena de texto F j, Y para convertir esa marca de tiempo en una cadena como December 3, 2008. El ltimo trozo de cdigo del ejemplo inserta el nuevo nombre recibido en la tabla de la base de datos.

de los ataques denominados Inyeccin SQL, ya que cuidan de que los datos dinmicos escapen de forma adecuada. En el ejemplo, si la variable $_POST[quien eres] contiene caracteres con algn significado especial en una consulta SQL, como (el delimitador de cadenas de caracteres), PDO se encargar de escaparlos de forma adecuada de modo que no causen ningn problema. Sin el uso de las sentencias preparadas, habr que asegurarse de forma explcita de escapar todos los datos dinmicos que vayan dentro de una consulta; un simple error, y se habr abierto la base de datos a toda clase de ataques o fugas de datos. La tabla utilizada en el Listado 2 tiene la siguiente estructura:
CREATE TABLE article_name_test ( name VARCHAR(255) NOT NULL, inserted_on DATETIME NOT NULL )

Se podra crear esta tabla en la base de datos con el siguiente programa en PHP:
<?php $dbh = new PDO U (sqlite:/tmp/guestbook.db); $dbh->exec U (CREATE TABLE U article_name_test ( name VARCHAR(255) NOT NULL, inserted_on DATETIME NOT NULL )); ?>

Sentencias Preparadas
La funcin $dbh->prepare() crea una sentencia preparada, una plantilla de una sentencia SQL que puede ejecutarse mltiples veces. En cada ejecucin, los signos ? (llamados parmetros de sustitucin) de la sentencia preparada se reemplazan por los valores reales. Para ejecutar la sentencia preparada hay que llamar al mtodo execute() del objeto sentencia y pasarle como parmetro un array con los valores de los parmetros de sustitucin. Hay dos buenas razones para utilizar las sentencias preparadas en vez de construir las consultas SQL literalmente como cadenas de caracteres que contengan los datos de forma dinmica: rendimiento y seguridad.

Procesado XML
Otra tarea que normalmente realiza PHP es el procesamiento de XML. PHP 5 ofrece dos esplndidas opciones: el mdulo SimpleXML para un procesamiento bsico de XML y el mdulo DOM para realizar acciones de la API Document Object Model. Con SimpleXML, un documento XML se representa como un objeto PHP:
<?php $feed = simplexml_load_file U (http://blog.ning.com/ U atom.xml); foreach U ($feed->entry as $entry) { print $entry->title . \n; } ?>

Rendimiento
Dependiendo del motor de base de datos que se est utilizando, la ejecucin de una sentencia preparada ser algo ms rpida que la correspondiente consulta SQL construida dinmicamente. Con la sentencia preparada, el motor de la base de datos puede planear de antemano y optimizar la consulta.

Seguridad
El potencial incremento del rendimiento no es muy espectacular en este pequeo ejemplo; sin embargo, el tema de la seguridad es diferente. Las sentencias preparadas nos protegen

Este programa PHP imprime algo parecido a la salida del Listado 3.

WWW.LINUX- MAGAZINE.ES

Nmero 38

41

DESARROLLO Especial PHP

La funcin simplexml_load_file(), como la mayora de las funciones que acceden ficheros en PHP, puede aceptar tanto URLs como rutas de ficheros locales. En un paso, la funcin carga el canal de noticias Atom de http://blog. ning.com/atom.xml en el objeto $feed. Como la estructura de este documento XML se basa en un objeto raz que est compuesto de diversos hijos denominados <entry/>, la propiedad entry del objeto $feed puede tratarse como un array con foreach(). Del mismo modo, como cada <entry/> posee un hijo denominado <title/>, el valor de la propiedad ttulo del objeto $entry es el contenido de texto del ttulo. (Ntese que mientras las propiedades de los objetos, como entry y title, se corresponden explcitamente con los nombres de los elementos XML, no hay ninguna necesidad de que los nombres de las variables en PHP tengan que ser los mismos que los nombres de los elementos XML. Slo es por conveniencia que el cdigo de este ejemplo utilice en PHP los nombres $feed y $entry. El mdulo SimpleXML es ideal para realizar tareas con canales de noticias Atom o RSS, y para otras tareas similares de procesamiento de documentos XML. Para un procesamiento ms complejo de XML, PHP soporta la API completa DOM nivel 3. El nivel 3 de DOM tambin puede ser una buena eleccin para el procesamiento de XML en PHP si ya se est familiarizado con la API DOM de otro lenguaje, como JavaScript. El Listado 4 utiliza la API DOM para construir un pequeo documento XML.

El documento XML que este ejemplo imprime es el siguiente:


<?xml version=1.0?> <people> <person flavor=U chocolate>alice</person> <person flavor=U vainilla>pepe</person> <person flavor=U fresa>carlos</person> </people>

Aunque la sintaxis en el Listado 4 es especfica de PHP, las clases y los mtodos son parte del lenguaje neutral de la API DOM. Un documento se representa por el objeto DOMDocument, DOMDocument::createElement() crea elementos que DOMDocument::appendChild() aade al documento, y DOMElement::setAttribute() aade un atributo a un elemento. El mtodo DOMDocument::saveXML() devuelve la representacin en XML del documento. Si se le pasa al mtodo el nombre de un fichero, escribir el documento XML en el fichero.

principal de PHP contiene los ficheros binarios para Windows as como el cdigo fuente [1]. El manual de PHP [2] es un recurso fantstico, no slo por la documentacin tan detallada de las funciones y las clases, sino tambin por los comentarios de los usuarios. PHP Planet [3], que consiste en una serie de blogs sobre PHP, es tambin un buen sitio para buscar informacin sobre PHP. PECL [4] es el sitio al que hay que acudir en busca de los ficheros binarios de las extensiones de PHP, como los mdulos para embeber Lua en programas PHP, sorprenderse con la librera ImageMagick o encontrar toda una coleccin de mdulos ya desarrollados. PEAR (PHP Application and Extension Repository) [5] es tambin un buen sitio para encontrar libreras y extensiones de PHP. Otros sitios interesantes son Zend Framework [6] y eZ Components. Algunos marcos de trabajo basados en MVC populares para PHP son CakePHP [8], Symfony [9] y Solar [10].

Conclusiones
Como ya se ha mencionado anteriormente, es bastante fcil escribir programas en PHP inseguros. No se vaya a unir a la innumerable cantidad de programadores que escriben programas en PHP inseguros. Essential PHP Security por Chris Shiflett [11] es un buen libro para aprender a escribir programas en PHP seguros. Si usted es un administrador de servidores, debera echarle un vistazo a Suhosin [12], que impide ataI ques tanto locales como remotos.

Y Ahora Qu?
Si se tiene Linux o Mac OS X, probablemente su sistema ya tenga instalado PHP. Normalmente, las distribuciones Linux suelen traer la ltima versin de PHP. Mac OS X no es tan bueno. En entropy.ch se pueden descargar los paquetes de PHP para OS X de Marc Liyanage. El sitio web

Listado 4: Creacin de Documento con DOM


01 <?php 02 03 // Algunos datos con los que trabajar 04 $flavors = array(alicia => chocolate, 05 pepe => vainilla, 06 carlos => fresa); 07 08 // Se crea un documento nuevo 09 $doc = new DOMDocument(); 10 11 // Se crea el elemento contenedor raz 12 $root = $doc->createElement(gente); 13 // y se aade al documento 14 $doc->appendChild($root); 15 16 // Se aade un elemento para cada persona que 17 // contiene un atributo con el sabor 18 foreach ($flavors as $who => $what) { 19 $el = $doc->createElement(person, $who); 20 $el->setAttribute(flavor, $what); 21 $root->appendChild($el); 22 } 23 24 // Se asegura de que el formato de salida sea legible 25 $doc->formatOutput = true; 26 // Muestra el XML 27 print $doc->saveXML(); 28 29 ?>

RECURSOS
[1] Descarga de PHP: http://www.php.net/ downloads.php [2] Manual de PHP: http://php.net/manual [3] PHP Planet: http://planet-php.net [4] PECL: http://pecl.php.net [5] PEAR (PHP Application and Extension Repository): http://pear.php.net [6] Zend Framework: http://framework. zend.com [7] eZ Components: components [9] Symfony: symfony-project.org/

http://ez.no/

[8] CakePHP: http://www.cakephp.org

http://www.

[10] Solar: http://solarphp.com/ [11] Shiflett, Chris. Essential PHP Security. OReilly, 2005. [12] Suhosin: http://www.suhosin.org

42

Nmero 38

WWW.LINUX- MAGAZINE.ES

También podría gustarte