PHP

El lenguaje PHP (cuyo nombre es acrónimo de PHP: Hipertext Preprocessor) es un lenguaje interpretado con una sintaxis similar a la de Perl, C++ o JAVA. Aunque el lenguaje se puede usar para realizar cualquier tipo de programas, es en la generación dinámica de páginas web donde ha alcanzado su máxima popularidad. En concreto, suele incluirse incrustado en páginas HTML (o XHTML), siendo el servidor web el encargado de ejecutarlo.

A la hora de procesar un fichero PHP no se genera un fichero ejecutable a partir del código fuente, sino que un intérprete va ejecutando instrucción por instrucción.

Puede ser utilizado de tres formas:

  • Para programación web. Este es su uso principal, y el único al que haremos referencia en el curso. En este caso, PHP estará integrado con un servidor web (como ocurre con el sistema LAMP).

  • Para programación en la consola. Permite crear scripts para la línea de comandos, sin depender de ningún servidor web. En caso de producir alguna salida, ésta será volcada en la salida estándar (generalmente la pantalla).

  • Para programación de interfaces gráficas. Usando la extensión PHP-GTK podemos acceder al API de la librería GTK para crear aplicaciones gráficas de escritorio.

Son varias las características que han propiciado que PHP se haya convertido en un lenguaje muy popular en Internet. En primer lugar, su curva de aprendizaje es baja, es decir, se puede aprender rápidamente si ya se conoce algún otro lenguaje de alto nivel. Por otra parte, comparte con Apache y MySQL su naturaleza de código abierto y aplicación multiplataforma, que permite que pueda ser ejecutado en los más diversos sistemas. Además, PHP se apoya en el trabajo de una compañía enteramente dedicada a la mejora del lenguaje y la creación de soluciones para apoyar en el desarrollo, mantenimiento e implantación de aplicaciones PHP. Afincada en California, Zend technologies (http://www.zend.com) también se encuentra presente en otros países como Israel, Francia o Alemania.

Evolución de PHP

Aunque PHP empezó a ganar popularidad entre los desarrolladores web alrededor de 1998, el lenguaje fue creado por Rasmus Lerdorf en 1994. PHP comenzó como un conjunto de herramientas sencillas codificadas en lenguaje C para sustituir a los scripts de Perl que Rasmus usaba en su página personal (de ahí el significado original del acrónimo "PHP" Personal Home Page Tools). Rasmus lanzó PHP para el público en general en 1995, y lo llamó PHP versión 2.

PHP 3 y 4

En 1997, dos desarrolladores, Zeev Suraski y Andi Gutmans, reescribieron la mayor parte del código de PHP y, junto con Rasmus, lanzaron la versión 3.0 de PHP en junio de 1998. A finales de ese año, PHP ya había amasado decenas de miles de desarrolladores, y estaba siendo utilizado en cientos de miles de sitios Web.

Para la siguiente versión, Zeev y Andi se pusieron a reescribir el núcleo de PHP una vez más, al cual llamaron "Zend Engine" (el nombre "Zend" está basado en sus dos nombres, **Ze**ev y A**nd**i). En ese mismo año, también fundaron Zend Technologies en Ramat Gan, Israel.

La siguiente versión, la 4, se puso en marcha en Mayo de 2000. Esta nueva versión mejoró a la 3, e incluyó características como manejo de sesiones HTTP, control del buffer de salida, el tipo booleano, mejoras en la orientación a objetos y un núcleo del lenguaje mucho más rico junto con un mayor soporte a una variedad más amplia de servidores Web.

Desde esa versión el código fuente se compila primero a un código máquina intermedio llamado **bytecode**, y el Zend Engine se encarga después de ejecutar este código, al estilo Java. Esto mejoró considerablemente la velocidad de ejecución respecto de la versión anterior.

Aunque PHP 4 fue una mejora considerable, aún sufría de un soporte relativamente pobre sobre programación orientada a objetos (POO). Es muy importante destacar que ya en aquellas fechas y gracias al control de versiones, se disponían de diferentes versiones menores (ramas 4.1, 4.2 y 4.3) de la misma versión mayor (4.X). Las revisiones menores de PHP 4 también introdujeron mejoras interesantes, como la inclusión de las variables superglobales en PHP 4.1.0 ($_GET, $_POST, etc), la desactivación por defecto de la opción register_globals en PHP 4.2.0, o la posibilidad de ejecutar los scripts desde la línea de comandos y la capa de acceso a ficheros y recursos de red a través de flujos o streams en PHP 4.3.0.

PHP 5

En Julio de 2004 se lanza PHP 5, basado en el Zend Engine 2.0, donde todo el esfuerzo principal se centró en la mejora del soporte de la orientación a objetos, muy pobre y discutida hasta ese momento, aunque también se añadieron otras características igual de importantes, como la capa de abstracción de acceso a bases de datos PDO (PHP Data Objects u Objetos de Datos PHP), SQLite por defecto, manejo de excepciones con bloques try-catch, iteradores, mejoras en el manejo de XML gracias a la extensión SimpleXML, mejoras en la velocidad y el rendimiento, y muchas cosas más.

Febrero de 2008, fecha clave en la historia de PHP

Antes de dicha fecha, la comunidad de PHP (The PHP Group) seguía desarrollando y resolviendo errores de la versión 4 junto con el desarrollo de las versiones 5.1 y 5.2. El problema fue que debido al gran cambio que suponía la versión 5 de PHP frente a la 4, produjo que muy pocos desarrolladores PHP adoptaran esa nueva versión ya que prácticamente los proyectos desarrollados en PHP4 eran incompatibles con la nueva versión. Además, aunque ya hubiera varias versiones estables de PHP 5, la mayoría de empresas de hosting no ofrecían esas nuevas versiones en sus servidores compartidos debido a esos grandes problemas de compatibilidad.
La comunidad PHP decidió tomar una decisión sin precedentes: dejar de dar soporte a partir de la última versión publicada de PHP 4 en 2008

La última versión de PHP4 fue la 4.4.9 publicada el 7 de agosto de 2008. Podéis verlo en esta url http://museum.php.net/php4/

En febrero de 2008 se publicó una web de apoyo a la adopción de PHP5, **gophp5.org** (actualmente reservada para otros menesteres) donde se anunciaban una serie de consejos, ideas y razones de porqué migrar a PHP5 y dejar PHP4. Por esas fechas ya estaban apareciendo proyectos, aplicaciones y frameworks que sólo funcionaban en PHP5 (Symfony por ejemplo) Algunas empresas de hosting empezaron a ofrecer PHP5 como reclamo haciendo menos traumático el cambio. En la siguiente figura podéis ver una captura de la web gophp5.org en web.archive.com http://web.archive.org/web/20110301014438/http://gophp5.org/

Captura de la web gophp5.org en web.archive.com

En junio de 2009, se lanzó la versión 5.3.x, introduciendo también características muy interesantes, inicialmente pensadas para PHP 6, como los espacios de nombres (namespace), el late static binding (enlace estático en tiempo de ejecución) y closures o funciones anónimas.

Aunque la versión 5.4 se hizo esperar, en Marzo de 2012 se publicó la versión estable de esa rama con la sorprendente novedad de incorporar un pequeño servidor web (pensado para pruebas, algo así como una herramienta rápida de testeo), soporte para Traits y sintaxis abreviada de array. Además se borraron algunos elementos del fichero php.ini como register_globals, safe_mode, allow_call_time_pass_reference y se eliminaron funciones obsoletas como session_register(), session_unregister() y session_is_registered().

Siguiendo la política de añadir mejoras sobre versiones mayores, en junio de 2013 (justo un año después de la versión 5.3) se publicó la versión 5.5 de PHP. Se añadieron algunas características importantes como los nuevos generadores para bucles, que la función `empty()` soporte expresiones, una nueva API para codificar contraseñas y la inclusión de ZendOptimizerPlus, un opcode-cache, que hace que la ejecución de script se realice con mayor velocidad.

Un opcode-cache o acelerador de PHP, es una extensión diseñada para acelerar el rendimiento de los scripts PHP. Para ello se almacenan en caché compilados en bytecode para evitar la sobrecarga de análisis y compilación del código fuente en cada solicitud (todas o algunas de las cuales nunca pueden incluso ser ejecutados) Los frameworks PHP más conocidos como Symfony, CakePHP o Zend Framework, hacen un uso intensivo de estos opcode-cache. Incluso llegan a estar integrados de forma nativa para facilitar su gestión y/o manipulación.

PHP 6 y unicode

En 2005, mientras se desarrollaba la versión 5.1, se inició un proyecto dirigido por Andrei Zmievski para llevar el soporte nativo de Unicode a PHP, mediante la incorporación de los componentes internacionales para la biblioteca Unicode (UCI), y la representación interna de cadenas de texto en UTF-16. Ya que esto provocaría cambios muy importantes, tanto en la parte interna del lenguaje y como en el propio código de los desarrolladores, se planeó lanzar esto como la versión 6.0 del lenguaje, junto con otras mejoras importantes.

Sin embargo, hubo muy pocos apoyos por parte de los desarrolladores y a ello se le sumó los problemas de rendimiento que surgen en la conversión hacia y desde UTF-16, que rara vez se utiliza en un contexto web. Aquello dió lugar a retrasos en el proyecto y como resultado muchas de las características que estaban pensadas para PHP 6 se lanzaron en PHP 5.3, que fue lanzado en 2009, sobre todo características no-Unicode, en particular los namespaces (espacios de nombres). En marzo de 2010, el proyecto en su forma actual fue oficialmente abandonado, y con el lanzamiento de PHP 5.4 se incluyeron el restante de características no-Unicode pensadas para PHP 6, tales como los Traits y Closure Re-binding. Existe un plan para que PHP sea 100% Unicode, pero desde 2014 no se ha vuelto a hablar de ese tema.

Proceso de publicación de nuevas versiones

Antes de hablar del proceso actual de publicaciones y mantenimiento de versiones de PHP, vamos a visualizar el histórico de las diferentes versiones de PHP extraída de la wikipedia. La podéis consultar en el siguiente enlace: PHP

Significado
* Versión antigua, sin soporte
** Con soporte para errores de seguridad
*** Con soporte para errores generales y de seguridad
# Lanzamiento futuro
Versión Fecha de lanzamiento Fin de soporte Notas
*1.0 08-06-1995 Llamada oficialmente "Personal Home Page Tools (PHP Tools)". Es la primera versión en usar el nombre "PHP".
*2.0 01-11-1997 Considerada por sus creadores la "herramienta más rápida y sencilla" para crear páginas web dinámicas.
*3.0 06-06-1998 20-10-2000 Zeev Suraski y Andi Gutmans reescribieron la base para esta versión.
*4.0 22-05-2000 23-01-2001 Se añadió un sistema de parsing de dos fases llamado motor Zend.
*4.1 10-12-2001 12-03-2002 Se introducen los arrays 'superglobales' ($_GET, $_POST, $_SESSION, etc.)
*4.2 22-04-2002 06-09-2002 Se deshabilitan register_globals por defecto.
Datos recibidos por la red no son insertados en el espacio de nombres global, cerrando posibles agujeros de seguridad en las aplicaciones.
*4.3 27-12-2002 31-03-2005 Se introduce CLI, y CGI.
*4.4 11-07-2005 07-08-2008 Se añaden páginas man para phpize y php-config.
*5.0 13-07-2004 05-09-2005 Motor Zend II con un nuevo modelo de objetos.
*5.1 24-11-2005 24-08-2006 Mejoras de rendimiento con la introducción de variables de compilador para el nuevo motor de PHP.
*5.2 02-11-2006 06-01-2011 Activada extensión de filtro por defecto. Soporte JSON nativo.
*5.3 30-06-2009 14-08-2014 Soporte para espacios de nombres, enlace estático en tiempo de ejecución, etiqueta de salto (goto limitada),Clausuras nativas, Soporte nativo para archivos PHP (phar), recolección de basura para referencias circulares, soporte mejorado para Windows,sqlite3, mysqlnd como reemplazo a libmysql como biblioteca para extensiones que funcionan con MySQL, fileinfo como reemplzado de mime_magic para mejor soporte MIME, extensión de Internacionalización, y etiqueta ereg obsoleta.
*5.4 01-03-2012 (15-09-2015) Soporte para Trait y sintaxis abreviada de array. Propiedades y funciones borradas: register_globals, safe_mode, allow_call_time_pass_reference, session_register(),session_unregister() y session_is_registered(). Servidor web incorporado.Varias mejoras a características existentes y al rendimiento, y requerimientos de memoria menores.
*5.5 20-06-2013 21-07-2016 Nuevos generadores para bucles, empty() soporta expresiones. Se pierde el soporte para Windows XP y Windows Server 2003.
**5.6 28-08-2014 31-12-2018 Constantes con expresiones escalares, listas de argumentos de longitud variable y exponencial mediante el operador
6.0 Sin fecha No especificada Versión abandonada por los continuos retrasos y problemas con el tratamiento de cadenas Unicode.
***7.0 03-11-2015 03-12-2018 Nueva versión de Zend Engine (de nombre en clave PHP#NG). Importante reducción del uso de memoria. Árbol sintáctico abstracto. Soporte consistente de 64-bits. Un buen número de errores fatales convertidos en excepciones. Mejora en la jerarquía de estas excepciones Generador de números aleatorio más seguro. Operador de coalescencia con null (operador ??) Clases anónimas. Compatibilidad con la última versión de OpenSSL (1.0.2e)
***7.1 01-12-2016 01-12-2019 Tipo void en el retorno de funciones (PHP RFC: Void Return Type) . Visibilidad de las constantes de clase (PHP RFC: Support Class Constant Visibility), Tipos nullable (PHP RFC: Nullable Types), Iterable de tupo seudo (PHP RFC: Iterable), Captura múltiple de excepciones (PHP RFC: Catching Multiple Exception Types)
#7.2 30-11-2011 30-11-2020

Tal y como hacen otros proyectos de software libre, la comunidad de PHP da soporte a tres tipos de versiones: http://php.net/supported-versions.php

Versión Fecha
7.0.10 (versión estable) 18-08-2016
5.6.25 (última estable de la rama 5.6) 18-08-2016
5.5.38 (última estable de la rama 5.5) 21-07-2016

Información obtenida de la página de descargas de PHP http://www.php.net/downloads.php consultado el día 14/09/2016.

A partir de junio de 2011 se empezó a utilizar un nuevo proceso de publicación y mantenimiento de versiones de PHP. El objetivo era establecer una hoja de ruta (roadmap) para dar mayor visibilidad y participación a toda la comunidad que mantiene PHP, a todos los usuarios del lenguaje y a todos aquellos distribuidores, contribuidores y empresas que usan PHP de forma activa. La comunidad de desarrolladores de PHP inició un RFC (Request For Comments) a través de su wiki donde se creó finalmente dicho proceso. El enlace original se encuentra en la WIKI de php.net en el siguiente enlace https://wiki.php.net/rfc/releaseprocess En esa hoja de ruta se establecieron los siguientes puntos:

  • Crear un proceso de publicaciones claro y periódico, dando a conocer con antelación las fechas de las nuevas versiones de PHP.
  • Crear un proceso transparente para la toma de decisiones sobre las mejoras a añadir mediante el uso de los RFCs y el uso del voto transparente y público.
  • Decidir qué cambios se van a realizar durante toda la vida de una versión: BC (Backward Compatibility) breaks (compatibilidad hacia atrás), correcciones de errores, parches de seguridad, etc.
  • Elegir de forma transparente a un grupo de personas encargadas de la publicación de una nueva versión.
  • Dar un mejor uso a la web bugs.php.net para rastrear cada cambio, revisión del código añadido, corrección de errores u otras tareas relacionadas con una publicación.
  • Reducir el tiempo de corrección de errores entre cada publicación.
  • Reducir el tiempo para agregar nuevas características en una publicación.
  • Eliminar los "BC breaks" (compatibilidad hacia atrás) en los errores solucionados para cada publicación.
  • Añadir nuevas características en versiones preliminares.

El ciclo de publicaciones es el siguiente:

  • Cada año se publicará una nueva versión mayor.
  • Por lo menos una publicación al mes
  • El ciclo de vida de una versión mayor será de 3 años:

    • Cada versión secundaria, por ejemplo 5.4.x, tendrá al menos 2 años de revisiones de seguridad y errores.
    • Después de esos dos años, tendrá al menos 1 año de sólo correcciones de seguridad.
  • Una vez sobrepasada la fase de pre-publicación, no se introducirán nuevas características (salvo pequeñas e independientes) en una versión menor durante el proceso de publicación de 3 años.

Por último destacar que gracias a este nuevo proceso de publicaciones, el futuro de PHP se presenta más brillante que nunca, no obstante, con millones de usuarios en todo el mundo y siendo utilizado en un 75% de los servidores, alcanzando el puesto de sexto lenguaje más utilizado del mercado según TIOBE; con novedades tan útiles en un futuro próximo como los traits y con frameworks como Symfony, Larevel, CakePHP o Yii que nada tienen que envidiar a Django, Ruby on Rails o Struts.

Una vez analizados los distintos elementos de un sistema WAMP, vamos a ver como interactúan entre sí, dependiendo de la arquitectura que adoptemos para nuestra aplicación web. Podemos decir que una arquitectura determina sus componentes, del mismo modo que los componentes determinan la arquitectura. Vamos a estudiar las distintas posibilidades existentes en el mundo web, detallando para cada una de ellas, su funcionamiento, componentes, ventajas e inconvenientes.

results matching ""

    No results matching ""