martes, 2 de agosto de 2011

Que es PHP

Capítulos introductorios donde hablaremos sobre los lenguajes de desarrollo del lado del servidor en general para explicar PHP en particular y que se entienda cuál es su modo de funcionamiento y los tipos de cosas que se pueden hacer con este lenguaje.

1.- Introducción a la programación en PHP
Explicamos someramente qué es el PHP y lo comparamos a otros lenguajes para el desarrollo de webs dinámicas.

2.- Breve historia de PHP
Desde sus inicios hasta la versión 4 ha sido desarrollado por muchas personas.

3.- Tareas principales del PHP
Mencionamos los principales grupos de funciones integradas en el lenguaje y lo que ellas nos ofrecen.

Cómo instalar PHP y MySQL

Explicaremos diversos modos que existen para instalar PHP y la base de datos MySQL, que es todo lo que necesitamos para empezar a trabajar. Para ello veremos cómo instalar PHP sobre los servidores web Apache o IIS. Además presentaremos diversos paquetes que nos permiten tener una instalación de todas las aplicaciones necesarias sin necesidad de ninguna configuración, lo que puede facilitarnos mucho la vida.

4.- Instalación de PHP en nuestro servidor
Pasos previos a la programación. Instalación del modulo PHP en distintos servidores web.

5.- Configuración de PHP con Apache en Windows, como CGI
Aprende cómo configurar PHP y Apache para que trabajen conjuntamente en un sistema Windows. Instalación como CGI.

6.- Configuración de PHP como modulo de Apache en Windows
Explicamos el proceso completo para instalar PHP en una máquina Windows y un servidor Apache. La instalación se realiza como módulo que es lo más seguro y rápido.

7.- Instalación de MyQL en Windows
Pasos a seguir para la instalación de la base de datos MySQL y algunas ayudas básicas para comenzar con buen pie

8.- Instalando PHP con IIS
Cómo instalar paso a paso PHP con IIS.

Primeros pasos con el lenguaje PHP

Empezamos a trabajar con el lenguaje de programación. En los siguientes capítulos del Manual de PHP explicaremos las generalidades sobre el lenguaje, como su sintaxis, las variables que podemos crear y sus tipos de datos, las variables del sistema que están disponibles sobre el servidor, operadores, etc.

9.- Introducción a la sintaxis PHP
Explicamos las pautas principales a seguir para incluir PHP en el código de nuestra página, la forma de introducir comentarios.

10.- Variables en PHP
Tipos de variables, características generales y aspectos específicos de PHP de estos elementos básicos de la programación.

11.- Cambio del tipo de las variables en PHP
Formas en que una variable de PHP puede ver variado su tipo.

12.- Variables de sistema en PHP
Qué son y para qué sirven estas variables del servidor. Comentamos algunas de las más útiles.

13.- Ámbito de las variables en PHP
Explicamos con detalle el ámbito de existencia de una variable en PHP y distinguimos entre variables globales y locales.

14.- Operadores
Lista descriptiva de los operadores más frecuentemente utilizados

Arrays y cadenas

Nos detenemos para ver cómo son los arrays en PHP, la estructura de datos más esencial que existe. Además aprenderemos a trabajar con cadenas en PHP.

15.- Tablas o Arrays en PHP
Creación de tablas por medio de variables tipo array. Utilidad y funciones útiles relacionadas.

16.- Trabajo con tablas o arrays en PHP
Vemos algunas de las funciones típicas del trabajo con arrays a través de una pequeña explicación y un ejemplo de uso.

17.- Cadenas en PHP
Aspectos relevantes de las cadenas o strings en PHP, un tipo de variables muy utilizado. Lista de caracteres protegidos.

Funciones en PHP

Las funciones son esenciales para poder realizar código de calidad, tanto en PHP como en muchos otros lenguajes de programación. En estos capítulos del Manual de PHP aprenderemos a definir funciones, trabajar con parámetros y retornar valores.

18.- Funciones en PHP
Utilidad de las funciones, creación y almacenamiento en archivos. Ejemplo práctico de creación de función.

19.- Más sobre funciones: paso de parámetros
Este capítulo pretende ser una ampliación de detalles que atañen al artículo dedicado a las funciones en PHP.

20.- Más sobre funciones: Retorno de valores
Para saber las formas en que una función devuelve valores este artículo contiene varias formas aptas para hacerlo.

Estructuras de control en PHP

Vemos una a una las distintas estructuras de control del flujo de los programas disponibles en el lenguaje de programación PHP: condicionales y bucles.

21.- Control del flujo en PHP: Condiciones IF
Presentamos una de las herramientas principales usadas para controlar el flujo de nuestros scripts: Los condicionales IF.

22.- Control del flujo en PHP: Bucles I
Estructura y funcionamiento de los bucles while y do/while.

23.- Control del flujo en PHP: Bucles II
Estructura y funcionamiento de los bucles for y foreach. Explicamos como salir de un bucle: Break y continue.

Aplicaciones web: paso de variables y memoria de estados

En los siguientes capítulos veremos diversas maneras que existen en PHP para conseguir que un conjunto de páginas y scripts se comporten como una aplicación web. Veremos cómo pasar datos de unas páginas a otras, por POST y GET, cómo memorizar datos asociados a un usuario a lo largo de toda la sesión y cómo memorizar datos en cookies, que perdurarán entre varias sesiones.

24.- Pasar variables por la URL con PHP
Veremos cómo transferir variables de una página a otra por medio de la URL, en PHP.

25.- Procesar variables de formularios. POST en PHP
Veremos cómo transferir variables con PHP, de una página a otra por medio de formularios, lo que se conoce habitualmente por POST.

26.- Autollamada de páginas
Páginas que se llaman a si mismas pasando datos por POST o GET: formularios reentrantes y variables pasadas por URL a la misma página.

27.- Utilización de las cookies en PHP
Aprendemos sobre las cookies en PHP. Explicamos en qué consisten estas célebres galletas y describimos su empleo y utilidad.

28.- Cookies en PHP
Explicaciones completas sobre cookies en PHP, con todos los parámetros de la función setcookie() y el array $_COOKIE

29.- Sesiones I
Nos introducimos al concepto de sesión y aprendemos su manejo y funcionamiento.

30.- Sesiones en PHP II
Describimos los metodos de trabajo con sesiones en PHP, inicializar sesión, crear variables de sesión o recuperarlas.

Bases de datos en PHP

Entramos en una de las partes más interesantes del manual de PHP, con los capítulos que tratan las bases de datos. Trabajaremos con MySQL y mostraremos cómo hacer todas las operaciones típicas con una base de datos, como acceso a registros, inserción, modificación y borrado.

31.- Trabajar con bases de datos en PHP
Interés del empleo de bases de datos con páginas dinámicas. Presentación del lenguaje SQL y de la base MySQL. Pasos previos a los ejemplos.

32.- Introducción de nuevos registros con PHP
Forma sencilla de introducir nuevos elementos en una tabla de base de datos. Realizamos un Insert con PHP.

33.- Selección y lectura de registros con PHP
Utilizamos el comando Select de SQL para crear una selección de nuestra tabla y mostrar todos los datos en pantalla por medio de un bucle. Con PHP.

34.- Actualizacion de un registro de base de datos con PHP
Explicamos cómo modificar o actualizar un registro existente en una tabla de una base de datos, con PHP. Es decir, hacer un update para un registro de una tabla, desde PHP.

35.- Borrado de un registro con PHP
Aprendemos a eliminar registros de una tabla de base de datos, con un ejemplo práctico en PHP.

Subir una aplicación web al servidor

Una vez que hemos terminado una aplicación web en local, tenemos que ponerla en producción en un servidor de Internet. Mostramos cómo subir todas las páginas a un servidor y algunas de las posibles tareas que nos tocará realizar para subir también la base de datos.

36.- Subir una aplicación PHP al servidor
Vamos a ver cómo subir una aplicación hecha en local a un servidor de Internet. Empezamos ofreciendo una serie de pautas para subir los archivos.

37.- Colocar los archivos PHP fuera del directorio de publicación
Algunos casos en los que colocar archivos fuera del directorio de publicación tiene sentido y utilidad.

38.- Subir una base de datos al sevidor de Internet
El segundo paso para subir una aplicación PHP al servidor consiste en colocar la base de datos en el.

39.- Subir base de datos MySQL vacía al servidor
La base de datos que pretendemos subir está vacía. Tan sólo hemos creado las tablas, pero no hemos introducido datos en ellas o, a lo sumo, tienen algún dato que hemos introducido de pruebas.

40.- Subir una base de datos MySQL con la estructura y los datos
Como transferir una base de datos MySQL que tenemos en local a nuestro servidor remoto, incluyendo tanto la estructura de las tablas como sus datos.

41.- Migrar una base de datos a MySQL
Indicaciones útiles para migrar una base de datos a MySQL, es decir, cuando tenemos que subir una base de datos local en cualquier gestor a una base de datos remota en MySQL.

Introducción a la programación orientada a objetos en PHP 4

Capítulos sobre la programación orientada a objetos que se puede realizar en PHP 4. Es una primera aproximación a la orientación a objetos, tal como se realizaba en esa versión de PHP.

42.- Programación orientada a objetos en PHP
PHP ofrece funcionalidades propias de la POO. En este capítulo veremos los aspectos más básicos de esta metodología.

43.- Constructores en PHP
Vemos lo que es un constructor y cómo definirlos en programación orientada a objetos en PHP.

44.- Herencia en PHP
Hablaremos de esta peculiar característica para hacer copias independientes y personalizadas de clases ya construidas, propia de la programación orientada a objetos.

Epílogos al Manual de PHP

Diversos artículos que finalizan este manual de PHP y ofrecen introducciones a diversos asuntos que son interesantes para conocer sobre este lenguaje de programación. Introducciones a algunas herramientas especialmente útiles, que pueden ayudarnos a desarrollar páginas web.

45.- Elegir entre PHP4 y PHP5. Conviene la migración?
A más de dos años de la llegada de la versión 5 de PHP, aún la comunidad de desarrolladores de PHP se plantea el interrogante.

46.- Problema del error 404 OK en PHP
Tenemos que asegurarnos que el error 404, de página no encontrada, sea correctamente enviado al navegador para que no le llegue un HTTP/1.x 404 OK.

47.- Librerías JSON para PHP
Información sobre las distintas librerías y opciones para utilizar la notación de objetos Javascript JSON en programas realizados con el lenguaje PHP.

48.- CodeIgniter
CodeIgniter es un framework PHP para la creación rápida de aplicaciones web. Presentación general del framework y primeras notas para empezar a usarlo

lunes, 1 de agosto de 2011

6.-Configuración de PHP como modulo de Apache en Windows

En este artículo vamos a explicar cómo instalar PHP como módulo de Apache 2.0 en un sistema Windows. Para las pruebas hemos utilizado Windows XP, pero seguro que con otros sistemas el proceso será muy parecido, aunque, en todo caso, indicaremos las diferencias documentadas en el sitio de PHP.

Anteriormente habíamos explicado la instalación de PHP como un CGI, aunque en la página de PHP desaconsejan esta opción, puesto que adolece de graves problemas de seguridad. Además, PHP instalado como módulo de Apache resulta mucho más rápido que como CGI.

Descargar y descomprimir PHP

El primer paso consiste en descargar la última versión de PHP. Podremos hacerlo desde la página oficial de PHP, en la sección de descargas. http://www.php.net/downloads.php Debemos elegir la versión "zip package" que contiene todas las funcionalidades de PHP y el módulo necesario para instalarlo en Apache.

Una vez descargado el paquete comprimido en .zip de PHP necesitamos descomprimirlo en nuestro disco duro. Podemos utilizar el directorio raíz del disco duro para descomprimir los archivos. En ese caso, se creará un directorio llamado algo como "php-4.3.1-Win32" que colgará de nuestro directorio raíz. Se recomienda cambiar el nombre del directorio creado a algo como "c:php". En todo caso, nos advierten en la página de PHP sobre no colocar ningún nombre de directorio que contenga espacios, pues algún servidor web puede dar problemas. Por ejemplo, cuidado con instalar PHP en un directorio como este "c:archivos de programaphp", pues en la ruta tenemos directorios con espacios.

Copia de las DLL

A continuación nos informan sobre la necesidad de copiar en nuestro directorio de sistema una serie de librerías (.dll), que encontraremos en el directorio sapi de nuestra instalación de PHP, supuestamente algo como "c:phpsapi",

El mencionado directorio de sistema puede variar de unas versiones a otras de Windows. En Windows XP, el directorio de sistema donde debemos copiar las dll, es "C:WINDOWSsystem32". En Windows 9x/ME, el directorio sería "C:WindowsSystem" y en Windows NT/2000 sería el directorio "C:WINNTSystem32" o bien, "C:WINNT40System32".

Definir un archivo php.ini

Otro archivo que debemos copiar, esta vez en nuestro directorio Windows, es el php.ini, que guarda las opciones de configuración definidas para PHP. En la distribución de PHP se incluyen dos archivos php.ini que podemos utilizar directamente en nuestro sistema. Estos dos archivos se llaman "php.ini-dist" y "php.ini-recommended" y contienen unas opciones típicas de configuración de PHP. Se recomienda utilizar "php.ini-recommended", porque viene optimizado para obtener los mejores niveles de seguridad. En cualquier caso, podemos editar en cualquier momento el contenido del archivo para modificar la configuración de PHP a nuestro gusto o necesidades.

Para definir el php.ini debemos hacer una copia del archivo de configuración escogido ("php.ini-dist" o "php.ini-recommended") y renombrarlo como el "php.ini". Posteriormente debemos copiarlo en nuestra carpeta Windows, que en sistemas 9x/ME/XP es "c:windows" y en sistemas NT/2000 suele ser "c:WINNT", o bien "c:WINNT40".

Editar httpd.conf

Posteriormente deberemos editar nuestro archivo de configuración de Apache, llamado "httpd.conf" que está en el directorio "conf" de nuestra instalación de Apache. También podemos encontrar un acceso directo para editar este archivo accediendo a Inicio - Programas - Apache HTTP Server - Configure Apache HTTP Server - Edit httpd.conf configuration file.

Debemos añadir un par de líneas de configuración del módulo de Apache.

LoadModule php4_module C:phpsapiphp4apache2.dll
AddType application/x-httpd-php .php

El lugar adecuado para añadir esas líneas es en el bloque de carga de módulos, que podemos encontrar si buscamos por el texto "LoadModule". Podemos añadir las líneas de carga del módulo PHP después de la carga de los otros módulos que vienen ya configurados en archivo httpd.conf de Apache.

Si no instalamos PHP en el directorio c:php, debemos editar las líneas a colocar en el httpd.conf para colocar la ruta correcta al directorio donde está la librería php4apache2.dll.

Un último paso

Antes de acabar y probar si PHP se ha instalado correctamente, necesitamos copiar una dll en el directorio sapi. Concretamente, la dll "php4ts.dll", que podemos encontrar en nuestro directorio de instalación de PHP es la que debemos copiar al directorio sapi, algo como "c:phpsapi".

Otra configuración que podemos aplicar al archivo httpd.conf es definir también como documento por defecto el archivo index.php en nuestro servidor Apache. El documento por defecto es generalmente index.html, pero lo habitual si vamos a programar con PHP es que también necesitemos definir index.php como documento a mostrar si no se indica otro documento del directorio al que se está accediendo.

El documento por defecto se define con la variable DirectoryIndex. Nos quedará una deninición como esta:

DirectoryIndex index.html index.html.var index.php

Probar si PHP está funcionando correctamente

Para terminar, podemos crear una página de prueba de PHP, que colocaremos en nuestro directorio de publicación de Apache, generalmente llamado htdocs, que se aloja dentro del directorio donde se ha instalado Apache, algo como "C:Archivos de programaApache GroupApache2htdocs"

Podemos crear un archivo llamado, por ejemplo, "prueba.php", en el que colocaremos dentro el siguiente código:

Esta función simplemente creará una página de muestra de las configuraciones definidas para PHP en ese servidor.

Para acceder al archivo creado desde nuestro explorador, escribiremos en la barra de direcciones esta URL:

http://localhost/prueba.php

Debería aparecer un resultado como el de la siguiente imagen.

Página resultado de hacer un phpinfo()

2.- Breve historia de PHP

PHP es un lenguaje creado por una gran comunidad de personas. El sistema fue desarrollado originalmente en el año 1994 por Rasmus Lerdorf como un CGI escrito en C que permitía la interpretación de un número limitado de comandos. El sistema fue denominado Personal Home Page Tools y adquirió relativo éxito gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias páginas. Dada la aceptación del primer PHP y de manera adicional, su creador diseñó un sistema para procesar formularios al que le atribuyó el nombre de FI (Form Interpreter) y el conjunto de estas dos herramientas, sería la primera versión compacta del lenguaje: PHP/FI.

La siguiente gran contribución al lenguaje se realizó a mediados del 97 cuando se volvió a programar el analizador sintáctico, se incluyeron nuevas funcionalidades como el soporte a nuevos protocolos de Internet y el soporte a la gran mayoría de las bases de datos comerciales. Todas estas mejoras sentaron las bases de PHP versión 3. Actualmente PHP se encuentra en su versión 4, que utiliza el motor Zend, desarrollado con mayor meditación para cubrir las necesidades actuales y solucionar algunos inconvenientes de la anterior versión. Algunas mejoras de esta nueva versión son su rapidez -gracias a que primero se compila y luego se ejecuta, mientras que antes se ejecutaba mientras se interpretaba el código-, su mayor independencia del servidor web -creando versiones de PHP nativas para más plataformas- y un API más elaborado y con más funciones.

est
Gráfica del número de dominios y direcciones IP que utilizan PHP.
Estadística de Netcraft.

En el último año, el número de servidores que utilizan PHP se ha disparado, logrando situarse cerca de los 5 millones de sitios y 800.000 direcciones IP, lo que le ha convertido a PHP en una tecnología popular. Esto es debido, entre otras razones, a que PHP es el complemento ideal para que el tándem Linux-Apache sea compatible con la programación del lado del servidor de sitios web. Gracias a la aceptación que ha logrado, y los grandes esfuerzos realizados por una creciente comunidad de colaboradores para implementarlo de la manera más óptima, podemos asegurar que el lenguaje se convertirá en un estándar que compartirá los éxitos augurados al conjunto de sistemas desarrollados en código abierto.

48.-CodeIgniter

Probablemente ya sepamos que un framework es un programa para desarrollar otros programas, CodeIgniter, por tanto, es un programa o aplicación web desarrollada en PHP para la creación de cualquier tipo de aplicación web bajo PHP. Es un producto de código libre, libre de uso para cualquier aplicación.
Como cualquier otro framework, Codeigniter contiene una serie de librerías que sirven para el desarrollo de aplicaciones web y además propone una manera de desarrollarlas que debemos seguir para obtener provecho de la aplicación. Esto es, marca una manera específica de codificar las páginas web y clasificar sus diferentes scripts, que sirve para que el código esté organizado y sea más fácil de crear y mantener. CodeIgniter implementa el proceso de desarrollo llamado Model View Controller (MVC), que es un estándar de programación de aplicaciones, utilizado tanto para hacer sitios web como programas tradicionales. Este sistema tiene sus características, que veremos en artículos siguientes.

CodeIgniter no es magia, pero contiene muchas ayudas para la creación de aplicaciones PHP avanzadas, que hacen que el proceso de desarrollo más rápido. A la vez, define una arquitectura de desarrollo que hará que programemos de una manera más ordenada y contiene diversas herramientas que ayudan a hacer aplicaciones más versátiles y seguras.

CodeIgniter y otros frameworks PHP pueden ayudarte a dar el salto definitivo como desarrollador PHP, creando aplicaciones web más profesionales y con código más reutilizable, con la diferencia que Code Igniter está creado para que sea fácil de instalar en cualquier servidor y de empezar a usar que cualquier otro framework. Además muchas de sus utilidades y modos de funcionamiento son opcionales, lo que hace que goces de mayor libertad a la hora de desarrollar sitios web.

Características generales de CodeIgniter

Algunos de los puntos más interesantes sobre este framework, sobre todo en comparación con otros productos similares, son los siguientes:
Versatilidad: Quizás la característica principal de CodeIgniter, en comparación con otros frameworks PHP. CodeIgniter es capaz de trabajar la mayoría de los entornos o servidores, incluso en sistemas de alojamiento compartido, donde sólo tenemos un acceso por FTP para enviar los archivos al servidor y donde no tenemos acceso a su configuración.

Compatibilidad: CodeIgniter, al menos en el momento de escribir este artículo de desarrolloweb.com, es compatible con la versión PHP 4, lo que hace que se pueda utilizar en cualquier servidor, incluso en algunos antiguos. Por supuesto, funciona correctamente también en PHP 5.

Actualizado: Desde la versión 2 de CodeIgniter ya solo es compatible con la versión 5 de PHP. Para los que todavía usen PHP 4 pueden descargar una versión antigua del framework, como CodeIgniter V 1.7.3, que todavía era compatible. Estas versiones están en la página de descargas de CodeIgniter.
Facilidad de instalación: No es necesario más que una cuenta de FTP para subir CodeIgniter al servidor y su configuración se realiza con apenas la edición de un archivo, donde debemos escribir cosas como el acceso a la base de datos. Durante la configuración no necesitaremos acceso a herramientas como la línea de comandos, que no suelen estar disponibles en todos los alojamientos.

Flexibilidad: CodeIgniter es bastante menos rígido que otros frameworks. Define una manera de trabajar específica, pero en muchos de los casos podemos seguirla o no y sus reglas de codificación muchas veces nos las podemos saltar para trabajar como más a gusto encontremos. Algunos módulos como el uso de plantillas son totalmente opcionales. Esto ayuda muchas veces también a que la curva de aprendizaje sea más sencilla al principio.

Ligereza: El núcleo de CodeIgniter es bastante ligero, lo que permite que el servidor no se sobrecargue interpretando o ejecutando grandes porciones de código. La mayoría de los módulos o clases que ofrece se pueden cargar de manera opcional, sólo cuando se van a utilizar realmente.

Documentación tutorializada: La documentación de CodeIgniter es fácil de seguir y de asimilar, porque está escrita en modo de tutorial. Esto no facilita mucho la referencia rápida, cuando ya sabemos acerca del framework y queremos consultar sobre una función o un método en concreto, pero para iniciarnos sin duda se agradece mucho.

Sin duda, lo más destacable de CodeIgniter es su accesibilidad, ya que podemos utilizarlo en la mayor gama de entornos. Esta es la razón por la que en DesarrolloWeb.com hemos elegido este framework PHP para comenzar un manual que explicará cómo utilizarlo para desarrollar nuestras propias aplicaciones web. En siguientes artículos iremos contando diferentes aspectos de este framework y lo utilizaremos para crear una primera aplicación web. Para continuar puedes leer el artículo Instalación y configuración de CodeIgniter. También puedes ir al Manual de Codeigniter que estamos publicando.

47.-Librerías JSON para PHP

JSON es una notación Javascript para escribir objetos que se ha hecho bastante popular en el mundo del desarrollo de webs y que se utiliza en diversos lenguajes de programación, componentes (habitualmente Ajax), etc. Su éxito se debe a que es una excelente forma para almacenar información que deseamos compartir entre distintos componentes o lenguajes de las aplicaciones web. Si trabajamos con Ajax y alguno de los frameworks Javascript existentes, ya habremos notado esta posibilidad y posiblemente ya estemos utilizando JSON o una notación similar.
JSON, cuyas siglas significan JavaScript Object Notation (en español Notación de Objetos de JavaScript), es un formato ligero, fácil de escribir o codificar, así como también es fácil de leer por los seres humanos. Desde Javascript podemos procesar directamente cualquier objeto JSON y existen librerías para la mayoría de los lenguajes de programación que tienen funciones para interpretar este formato. Por ello se ha adoptado universalmente. Para más información podemos visitar el sitio web de JSON en http://www.json.org/.

Esto quiere decir que con JSON podemos comunicar datos fácilmente entre scripts Javascript y scripts PHP. Por ejemplo, pensemos en una validación de formulario que se desea hacer con Ajax. Los datos del formulario se pueden enviar a PHP por medio de POST y luego podríamos desde PHP enviar a Javascript el resultado de validar esos datos en el servidor. Como la validación puede ser positiva o negativa, así como puede tener más o menos códigos de error y acciones a realizar dependiendo de la información procesada, el script PHP tiene que mandar una respuesta más o menos elaborada al script Javascript y una posibilidad es enviar esos datos desde PHP utilizando la notación JSON.

Disponibilidad de las funciones JSON en PHP

PHP dispone de varias funciones para hacer distintos tratamientos con notación de objetos JSON, que permite convertir un objeto PHP, o cualquier otro tipo de variable, a un string con notación JSON, así como crear un objeto PHP a partir de un string codificado con JSON.
En PHP, como decíamos, es posible producir y consumir datos cargados con notación JSON, por medio de unas funciones de las que dispone el lenguaje, que existen de manera predeterminada en los servidores modernos de PHP y que se pueden utilizar también en instalaciones antiguas de PHP, aunque con algún trabajo de instalación adicional.

A partir de PHP 5.2 las funciones JSON están disponibles siempre, pero si utilizamos por ejemplo PHP 4 tendríamos que instalarlas manualmente. Para ello existen varios paquetes de librerías, que provienen de diversas fuentes, que tienen funciones para tratar con JSON desde PHP.

- Paquete JSON de PECL
Este paquete, del repositorio de librerías PHP PECL, es compatible con PHP 4.3.0 o superior. En versiones superiores a PHP 5.2 está disponible por defecto. En versiones anteriores del lenguaje se tendría que instalar de manera separada.

- Librería JSON-PHP
Es una librería de funciones que se conoce también con el nombre de "Services_JSON". Originariamente escrita por Michal Migurski, en la actualidad se encuentra disponible dentro del framework PHP PEAR: http://pear.php.net/package/Services_JSON

- JSON Lib en Zend Framework
Es una librería de funciones para tratamiento con JSON que forma parte del framework PHP Zend.

- XML-RPC para PHP
Por medio de una extensión para la librería php-xmlrpc, también se puede tratar con notación de objetos JSON.

Las particularidades de cada sistema son ligeramente distintas. Cabe decir que la más interesante sería la primera, que forma parte de PECL, puesto que está escrita en C y por tanto será más rápida de ejecutarse, al formar parte de los componentes nativos de PHP. Como decimos sólo podremos disponer de ella a partir de PHP 5.2, pero en servidores antiguos tendríamos que instalarla aparte, lo que a menudo será complicado, o incluso imposible para sitios web en producción y en un alojamiento compartido.

Así que, si nuestro servidor PHP no dispone de las funciones JSON por estar poco actualizado, nos costará mucho menos esfuerzo y dolores de cabeza utilizar otra librería distinta a la básica de PECL. En este caso, por la facilidad de instalación, se recomendaría la utilización de la librería que viene en PEAR, que se puede descargar del propio sitio de PEAR, en la URL http://pear.php.net/package/Services_JSON

Nota: Hemos publicado en DesarrolloWeb.com en pasados artículos algunas referencias útiles para instalar PEAR y utilizar algunos componentes de este framework PHP.este framework PHP.
Existe un artículo muy interesante, aunque en inglés, que compara las diversas librerías existentes para usar JSON desde PHP, que contiene diversas informaciones técnicas, requisitos y un análisis del desempeño de cada una.

En el próximo artículo explicaremos cómo utilizar las funciones JSON en PHP por medio de las funciones nativas del lenguaje.

46.-Problema del error 404 OK en PHP

Hay veces que con PHP queremos enviar un error 404 de página no encontrada, para avisar al navegador que una página no existe. Es sencillo enviar por las cabeceras del http un error 404, pero hay que asegurarse que el código de error esté bien enviado para no dar informaciones ambiguas a los clientes que se conecten al servidor.

Esto es importante porque el código 404 también sirve a los buscadores o motores de búsqueda, para informar que una página no existe. Si damos informaciones ambiguas a los buscadores puede que redunde negativamente en la clasificación de nuestro sitio.

El problema que queremos comentar ahora es el típico error "404 OK". Esto es una ambigüedad: 404 es página no encontrada y OK quiere decir que todo ha ido bien. Pero si no encontró la página ¿Cómo es que decimos que OK? Eso es algo que se puede evitar enviando el error correctamente en la cabecera del HTTP.

Para enviar un código de error 404 por las cabeceras del HTTP con PHP tenemos que hacer lo siguiente:



Con la función header() de PHP enviamos información en la cabeceras del http. En este caso hemos enviado una cabecera 404 Not Found. Atención, porque la función header() debe invocarse antes de haber escrito nada en la página, osea, antes de haber enviado ninguna información al navegador.

Pero dependiendo de la configuración de nuestro servidor esto puede funcionar o no.

La mejor manera de saber qué estamos enviando por las cabeceras del http es utilizar un programa que nos muestre las cabeceras que se generan tanto en el cliente como en el servidor. Existen varios programas que nos podrían servir, pero nosotros vamos a recomendar aquí una extensión de Firefox que hemos comentado ya en otro artículo: Ver cabeceras HTTP con LiveHttpHeaders.

Veremos que en algunas ocasiones enviando esta cabecera el navegador recibe un código de error como este:

HTTP/1.x 404 OK

Eso es algo que tenemos que evitar, porque es ambiguo. La cabecera deseable sería:

HTTP/1.x 404 Not Found

Pues bien, cuando la cabecera que generamos es HTTP/1.x 404 OK tenemos que hacer lo siguiente para conseguir el deseado HTTP/1.x 404 Not Found.



Primero le indicamos la cabecera del http como 404 y luego lanzamos otra cabecera indicando que el estatus que tiene que enviar es "Not Found". Esto debería funcionar en todos los casos. Es posible que con una sola de las dos cabeceras enviadas nos envíe ya el error 404 Not Found, depende de la configuración de nuestro servidor que necesitemos una u otra. Pero si indicamos las dos en las pruebas que he hecho con varios servidores siempre he recibido el código de error correcto.

Insisto en que lo bueno es que veamos qué cabeceras del HTTP estamos enviando con un producto como LiveHttpHeaders . Así podremos estar seguros de qué cabeceras tenemos que enviar y qué código PHP es el correcto en nuestro caso.

Porque en algunos servidores PHP si enviamos sólo esta cabecera:



Nos envía al navegador el código:

HTTP/1.x 200 OK

Por ejemplo, en este caso es todavía peor, porque nosotros habíamos querido enviar un error 404 y en realidad lo que ha llegado al navegador es un 200 OK que quiere decir página encontrada y correcta.

En definitiva, cabe estudiar detalladamente este asunto para asegurarnos que estamos enviando la cabecera correcta y el error 404 es claro.

45.-Elegir entre PHP4 y PHP5. Conviene la migración?

Las dudas básicamente circulan siempre el mismo camino, y ambas elecciones tienen sus ventajas y desventajas. Intentaremos en este informe orientar a los desarrolladores a decidirse por una u otra alternativa.
Es importante remarcar antes de ubicarse de lleno en el análisis de las ventajas y desventajas de una u otra opción, las principales diferencias existentes entre ambas versiones, cuales son los cambios que repercuten más fuertemente en la compatibilidad de los scripts, y que es lo que nos depara el futuro en toda esta historia.

Cambios profundos

La llegada de PHP5 vino emparejada de una reestructuración del Core de PHP, lo que los creadores de PHP llama Zend Engine.
Así como el lejano PHP3 incluye su Zend Engine 0.5, y PHP4 el Zend Engine 1.0, tenemos Zend Engine 2.0 en PHP5. El cambio de versión no fue trivial; incluye la reescritura casi total del modelo de objetos, entre sus cambios más sustanciales.
Esto repercute directamente en los scripts de PHP4 que utilizan clases, tanto en la compatibilidad como en performance de ejecución. Posteriormente en este artículo nos referiremos nuevamente a este tema.
Veamos un ejemplo que nos muestra un cambio sustancial en la implementación del modelo de objetos:

nombre = $nombre;
}

function getNombre() {
return $this->nombre;
}
}

function Algo($p) {
$persona->setNombre("Daniel");
}

1 $persona = new Persona();
2 $persona->setNombre("Pichongol");
3 Algo($persona);
4 echo $persona->getNombre();

?>

¿Cuál es el problema en este código corriendo en PHP4?

En la línea 1 instanciamos un objeto de la clase Persona.
Luego le decimos que se llama Daniel.
El error de implementación viene con la línea 3. El argumento $p que recibe Algo, no es mas que una copia de $persona, y eso esta MAL. ¿Porque?, mínimamente por 2 razones.
La primera razón es que esta estrategia es POO-No compatible. Claramente cuando hablamos del Paradigma Orientado a Objetos, estamos casi descartando que cada objeto sea referenciado por su Identificador.
Sin embargo, el Zend Engine 1.0 no está preparado para dicha acción:


La variable $cadena pasada como argumento a la función ejemplo, es copiada para su uso local dentro de dicha función. Es lo que se conoce como paso de parámetros por valor.
El Zend Engine 1.0 hace exactamente esto para todas las funciones, inclusive para las que están dentro de una clase, las cuales en ese caso actúan como métodos:

setNombre("Daniel");
}
?>,

Volviendo al ejemplo inicial de la clase persona, el método Algo recibe una copia (un clon) del objeto Persona.

La segunda razón viene emparejada con la primera, siendo consecuencia de esta.
Cualquier modificación del objeto Persona que se produzca dentro del método Algo, solo tendrá alcance local, y no se verá reflejado cuando la función retorne.

getNombre();
?>

En ese caso la modificación del nombre que hace la función Algo al objeto Persona no se ve reflejada cuando hacemos echo $persona->getNombre().
En nuestro browser veremos "Pichongol".

Este es solo un ejemplo del porque de la reestructuración tan importante en el Core de PHP. Es claro que toda reestructuración barre con cuestiones de compatibilidad, para ganar en otros skills; en este caso claramente estamos ganando en performance, al liberarnos del overhead que implica la constante copia de objetos que son argumentos de métodos y funciones.
En artículos posteriores trataremos en mayor detalle y profundidad los distintos aspectos que fueron modificados, haciendo una comparativa entre como se logran en PHP4 y como se logran en PHP5. Además de explicar profundamente las diferencias en el modelo de objetos nos quedan temas pendientes como Opciones de configuración (php.ini), Conexión a MySQL (mysqli), cambios en los módulos, etc.

Hecha esta introducción, estamos en condiciones de definir las distintas situaciones en las que se puede encontrar el desarrollador, y que aspectos juegan a su favor o en contra según la situación en la que se encuentre.

¿Cual es mi escenario?

En el momento de plantearse la pregunta, el desarrollador seguramente se ubicará en alguno de los dos escenarios posibles:
" Newbie (Iniciación en PHP).
" Experimentado.
Newbie

En el planteo de esta discusión, podríamos decir que es la situación ideal, o por lo menos la más beneficiosa. Si eres una persona que quiere arrancar en PHP, no lo dudes, PHP5 es para ti. Tus aplicaciones gozaran de las nuevas capacidades en OOP, obtendrás el beneficio de una mejor performance de ejecución (esta comprobado experimentalmente que PHP5 corre un 25% más rápido que PHP4) y tu código estará muy bien acondicionado en cuanto a la compatibilidad con el nuevo hijo que asoma: PHP6.
Por cierto, no todo es color de rosas. Una de los mayores beneficios a la hora de elegir PHP para trabajar en nuestro proyecto es la gran cantidad de código que podemos encontrar en Internet, y utilizarlo para nuestros trabajos. Tenemos una gran probabilidad de que ante alguna tarea que se nos plantea, podamos encontrar algún script que nos solucione la vida, obviamente adaptándolo a nuestras necesidades.
Ahora bien, no todo el código que vamos a encontrar es compatible con PHP5. De hecho la gran mayoría todavía no se ha adaptado. Es cierto que con algún setting en nuestro php.ini podemos ayudar a darle mayor compatibilidad, pero como contrapartida muchas de estas settings se eliminaran en PHP6.
¿Qué queda? Hacerlo compatible modificando el código, una tarea que para un desarrollador que se inicia no siempre es sencillo. De todas formas a no alarmarse, que los grandes proyectos (PHPNuke, PHPBB, etc.) ofrecen compatibilidad.
Experimentado

En este caso, el optar por quedarse con PHP4 o pasar a PHP5 depende de nuestra aplicación.
Las interrogantes que el desarrollador se puede plantear podrían ser:
- ¿Mi aplicación usa clases y objetos?
- ¿Mi motor de Base de datos es MySQL?
- ¿Utilizo un hosting externo?
- ¿Mi aplicación sufre modificaciones en cuanto a los requerimientos y lógica de negocios?
Pasemos a discutir ventajas y desventajas en cada uno de los interrogantes:

¿Mi aplicación usa clases y objetos?

Como pudimos comprender al comienzo de este articulo, uno de los principales esfuerzos de los diseñadores del Zend Engine radicó en el mejoramiento del modelo de objetos, basándose claramente en un referente indiscutible en esta materia como lo es Sun. Salvando las diferencias, se han tomado muchas cosas de Java, desde convenciones de nomenclaturas hasta estrategias de implementación.
Seria un desperdicio no utilizar dicho esfuerzo, sobre todo si nuestra aplicación hace un uso exhaustivo de clases y objetos.
¿Mi motor de Base de datos es MySQL?

A diferencia de la estrategia de PHP4 para la conectividad PHP/MySQL, en la que el Core de PHP nos provee de un set de funciones para dicha interacción, en PHP5 MySQL nos provee de un API externo.
Básicamente, la razón de este cambio fue una modificación de licencia de MySQL, que obligo a PHP a hacer de MySQL una base de datos más, y no "LA" base de datos, como venia siendo en PHP3 y PHP4.
De todas formas, esto no repercute en nuestro código, sino en la performance de nuestra aplicación.
El hecho de que una extensión no forme parte del Core de PHP y pase a ser externa nos genera un overhead, una sobrecarga de ejecución en detrimento de la performance.
Como contrapartida, PHP5 nos da la posibilidad de sacarle el mayor jugo posible a las muchas mejoras incorporadas en MySQL 4.1.3 o superior, a través del API mysqli.
Esto implica hacer uso de otras funciones, modificando nuestro código.
Ahora bien, ¿que tan costosa es esta reescritura? Dependerá de nuestra estrategia de conexión a base de datos. ¿Utilizamos una capa de abstracción del estilo ADOdb ? Si la utilizamos estaremos mucho mejor parados frente a tal reescritura. En caso contrario el tiempo invertido será sensiblemente mayor.
¿Utilizo un hosting externo?

En caso de no disponer de un hosting propio, y tener que depender de un hosting externo que nos provea de PHP, seguramente el hecho de pensar en migrar a PHP5 puede ser un problema. De hecho, estadísticas de principio de 2006 nos indican que solo alrededor del 5% de los hosting que proporcionan PHP, tienen PHP5.
Esto no hace mas que reflejar la lentitud con la que se esta moviendo el proceso de traspaso de PHP4 hacia PHP5.
Una pregunta que surge directamente sobre este tema es ¿Por qué?
Bueno, si uno tomo una distribución de Linux, es poco probable que la versión de PHP5 sea la incluida.
La conformidad de los programadores con PHP4 es grande, y mucha de la documentación existente esta escrita para PHP4.
De todas formas, a no dormirse con PHP4. Un tema que se trata en la segunda parte de este artículo es lo nuevo que nos trae PHP6. Veremos que PHP5 en muchos aspectos es una transición mientras que la confirmación se llama PHP6.
¿Mi aplicación sufre modificaciones en cuanto a los requerimientos y lógica de negocios?

Cuando las aplicaciones tienen requerimientos de cliente bastante cambiantes, y se emplean recursos para su mantenimiento, o utilizamos una metodología de desarrollo incremental (software versionado), lo ideal es utilizar lo último que nos proporciona nuestra plataforma de programación. Generalmente lo que se busca es un cambio gradual, modular, y sostenido.
Por otro lado, si nuestras aplicaciones residen en producción sin mayores modificaciones (algún proceso batch, alguna aplicación depurada, algún algoritmo estable) y estamos conformes con su funcionamiento, quizás no sea de nuestro interés migrar hacia una nueva versión.
Nos queda analizar que hay de nuevo en PHP6 y que cosas deberíamos ir teniendo en cuenta si utilizamos PHP4 o PHP5.