php

Apache + PHP + MySQL en Mac OS X

En esta guía vamos a ver cómo podemos tener en nuestro equipo un entorno de desarrollo MAMP, para poder testear las páginas con las que trabajamos. En concreto vamos a ver cómo hacer esto sobre OS X Lion.

MAMP: Pasos para su instalación

  1. Habilitar PHP en Apache.
  2. Configurar hosts virtuales.
  3. Iniciar el sevidor web Apache.
  4. Instalar MySQL.
  5. Instalar phpmyadmin.

Como ves, no vamos a instalar ni PHP ni Apache. Esto es porque OS X Lion lo trae ya instalado. Solo nos tenemos que preocupar por integrarlo y por añadir un sistema gestor de bases de datos. ¡Vamos allá!

1. Habilitar PHP en Apache

Como ya sabes, OS X Lion trae incorporado PHP. Para comprobarlo, vamos a abrir terminal y vamos a ejecutar:

$ php -v

PHP 5.3.15 with Suhosin-Patch (cli) (built: Jul 31 2012 14:49:18)
 Copyright (c) 1997-2012 The PHP Group
 Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

Lo cual nos indica que está instalado PHP 5.3.15 con el parche de seguridad Suhosin.

Para habilitarlo en Apache vamos a editar el fichero /etc/apache2/httpd.conf, y vamos a descomentar la siguiente línea:

#LoadModule php5_module libexec/apache2/libphp5.so

Y con esto ya hemos habilitado PHP en Apache!

2. Configurar hosts virtuales

De manera predeterminada Apache trae los siguientes hosts:

  • http://localhost/~tuusuario/ – Con el contenido de la carpeta /Users/tuusuario/Web/.
  • http://localhost/ – Con el contenido de la carpeta /Library/WebServer/Documents/.

En este ejemplo vamos a alojar cada nuevo host virtual en una carpeta dentro de /Library/WebServer/Documents/. Por tanto, vamos a otorgar permisos de escritura a nuestro usuario:

sudo chmod g+w /Library/WebServer/Documents/

Y ahora vamos a habilitar los hosts virtuales en Apache. Editamos de nuevo el fichero /etc/apache2/httpd.conf y descomentamos la siguiente línea:

Include /private/etc/apache2/extra/httpd-vhosts.conf

Y con esto ya tendríamos nuestro entorno preparado para alojar hosts virtuales.

Host virtual de ejemplo

Vamos a crear un ejemplo. Un host llamado pagina01.local. Lo primero será mapear ese nombre a nuestro host. Con esto logramos que haya un nombre único que apunte a nuestro equipo. Para ello editamos como administradores el fichero /etc/hosts y añadimos la siguiente línea:

127.0.0.1 pagina01.local

Ahora creamos la carpeta donde se alojará la página:

mkdir /Library/WebServer/Documents/pagina01.local/

Y añadimos a la carpeta que acabamos de crear un fichero index.php, que es el archivo predeterminado, con el siguiente contenido:

<?php phpinfo(); ?>

Por último, vamos indicar a Apache que hemos creado un host virtual, dónde lo hemos creado, con qué nombre se accederá, etc. Editamos el fichero /etc/apache2/extra/httpd-vhosts.conf y añadimos lo siguiente:

<VirtualHost *:80>
 ServerAdmin admin@example.com
 DocumentRoot "/Library/WebServer/Documents/pagina01.local"
 ServerName pagina01.local
 ServerAlias *.pagina01.local
 ErrorLog "/private/var/log/apache2/pagina01.local-error_log"
 CustomLog "/private/var/log/apache2/pagina01.local-access_log" common
 </VirtualHost>

Y con esto ya está preparado para funcionar nuestro nuevo host virtual. En cuanto iniciemos el servidor web, podremos consultar la página.

3. Iniciar el servidor web Apache

Por defecto Mac OS X no arranca el servidor web. Para hacerlo simplemente tendremos que acceder a las preferencias del sistema, y en el apartado “Compartir” marcamos la opción “Compartir Web”:

Ventana de habilitación de compartir webs en OS X

¡Y ya tenemos iniciado el servidor web! Puedes probar que ha funcionado accediendo a http://pagina01.local/. Si todo ha ido bien hasta ahora, te saldrá la configuración de PHP.

4. Instalar MySQL

Los equipos de escritorio no incorporan un servidor de bases de datos. Al tratarse de un estándar, vamos a instalar MySQL.

Accedemos a http://dev.mysql.com/downloads/mysql/ y descargamos la versión DMG. Cuando lo hayamos descargado, instalaremos los tres ficheros:

MySQL en el Finder

Una vez instalado, arrancamos el servidor de bases de datos, yendo a las Preferencias del Sistema, accediendo a MySQL y pulsando sobre “Start MySQL Server”:

Preferencias MySQL en entornos MAMP

Ahora vamos a introducir la contraseña del usuario root. Lo podemos hacer o bien así:

$ /usr/local/mysql/bin/mysqladmin -u root password 'contraseña'

O bien siguiendo los pasos del siguiente comando:

$ sudo /usr/local/mysql/bin/mysql_secure_installation

Y con esto ya tenemos instalado, iniciado y preparado nuestro servidor de bases de datos.

5. Instalar phpMyAdmin

PhpMyAdmin es el frontend MySQL más popular. Además funciona en PHP, por lo que nos viene de perlas para poner a prueba nuestra recién creada instalación del entorno MAMP.

Podemos instalarlo en un nuevo virtual host. Para ello tan solo debemos seguir los pasos del apartado en que creamos el virtual host pagina01.local, y crear uno llamado, por ejemplo, phpmyadmin.local

Descargamos la última versión desde http://www.phpmyadmin.net/home_page/downloads.php y la descomprimimos en /Library/WebServer/Documents/phpmyadmin.local/

Por último, copiamos el fichero config.sample.inc.php a config.inc.php, y sustituimos esta línea:

$cfg['Servers'][$i]['host'] = 'localhot';

por esta:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

¡Y ya lo tenemos! Si accedemos a http://phpmyadmin.local/ con nuestro usuario root, y la contraseña que establecimos al instalar MySQL, tendremos acceso al frontend phpMyAdmin.

A partir de aquí, ya podrás crear nuevos hosts virtuales y sus bases de datos a medida que los necesites para poder trabajar sobre tu entorno de desarrollo local.

¡Disfruta de tu entorno MAMP!

Introducción a la programación en Facebook V

Quinta y última parte de esta guía introductoria al desarrollo de aplicaciones web sobre la Facebook Platform. Ya conoces el ecosistema de tecnologías de Facebook, sabes cómo crear distintos tipos de aplicaciones, y conoces el SDK JavaScript por completo. Hoy vamos a ver el PHP SDK.

Antes de seguir leyendo, puedes echar un vistazo a la página GitHub donde está alojado el proyecto PHP SDK, y desde donde te lo podrás descargar. Nosotros vamos a hablar sobre la última versión estable, la 3.1.0.

Introducción a Doctrine 2

¡Hola! Últimamente sigo liado sumergiéndome en el mundo de ASP.NET, de ADO.NET, y sacando tiempo de debajo de las piedras para un pequeño proyecto en mi querido Zend Framework en PHP. Tras ver ADO.NET Entity Framework sentí la necesidad de usar algo igual en PHP; la solución se llama Doctrine :) La primera pregunta que nos deberíamos hacer es, qué es exactamente Doctrine. Respuesta rápida: Es un ORM de PHP. Pero analicémoslo un poco más.

En primer lugar, ¿qué diantres es un ORM? Viene de las siglas Object-relational mapping, que viene a traducirse como Mapeo objeto-relacional. En concreto es una técnica, o patrón arquitectónico, que permite comunicar dos sistemas distintos, típicamente una base de datos relacional con objetos de un lenguaje orientado a objetos, mediante un sistema que “mapea” (vincula) ambos sistemas. Mucha gente (yo mismo) ha creado a mano sus objetos mapeadores que, junto con objetos usando el patrón Active Record, daban un resultado muy similar a lo que un ORM nos ofrece. Pero oye, un ORM hace todo el trabajo sucio por nosotros ;)

Limitar la velocidad de descarga en PHP

Una de las cosas que tienen muchas páginas de descarga directa es la velocidad limitada para los clientes no premium. ¿Cómo lo hacen? Vamos cómo.

En este ejemplo vamos a suponer que queremos limitar la velocidad de descarga a 5kB/s. Para ello utilizaremos la extensión HTTP de pecl, en concreto la magia reside en la función http_throttle. Esta función recibe dos parámetros:

  1. número de segundos entre cada envío de bloques de datos.
  2. tamaño en bytes de cada bloque de datos.

10 cosas que quizás no sabías de PHP en la shell

Todos sabemos lo fantástico que es PHP como lenguaje de programación de páginas web. Lo que no muchos saben es que es igualmente fantástico como lenguaje para realizar programas multiplataforma para la shell. No todo es bash, Python, perl o Microsoft Powershell. Vamos a ver algunas de las cosas que quizás no sabías que podemos hacer con PHP en la consola.

Nota: Toda esta información está disponible en el manual de documentación de PHP.

Variables en PHP – zval

Todos los lenguajes de programación permiten almacenar valores en memoria. Estos valores generalmente pueden ser de varios tipos -numéricos, caracteres, booleanos, etc. Muchos lenguajes son de tipado estático, es decir, cuando se inicializa una variable, se declara también el tipo de dato que se va a alojar en ella; es el caso de lenguajes como C o Java. Por contra, tenemos también el tipado dinámico, donde se decide en tiempo de ejecución qué clase de dato contendrá la variable; es el caso de PHP o JavaScript.

PHP 5.3.3 liberada

Hace ya un año que PHP lanzó la versión 5.3.0, la última rama de desarrollo de la versión 5 que adelanta muchas de las funcionalidades más esperadas, como namespaces o closures. Hoy se ha liberado la versión 5.3.3. Se ha centrado sobre todo en mejorar el rendimiento y la seguridad de la rama 5.3, con más de 100 errores corregidos, por lo que se recomienda encarecidamente actualizar a la nueva versión.

Entre las novedades, se destacan:

  • Actualizada la versión de sqlite a 3.6.23.1
  • Actualizada la versión de PCRE (Expresiones Regulares Compatibles con Perl) a la versión 8.02
  • Añadido FPM (Gestor de Procesos de FastCGI) SAPI. SAPI hace referencia a los módulos de PHP que hacen de interfaz al servidor web (Server Application Programming Interface)
  • Añadido soporte para stream filter de la extensión mcrypt.

¡A disfrutarlo!

FirePHP – Integra logs de PHP en Firefox

En todo desarrollo se hacen necesarias herramientas que permitan hacer un seguimiento del código. Hoy voy a mostrar cómo mostrar logs desde PHP directamente a una consola en Firefox. ¡Di adiós a los “echos” y a los “var_dump”!

Expresiones Regulares

La primera vez que ves una de ellas sientes nauseas. A partir de ese momento cada vez que te enfrentas a ellas sientes mareos, hasta que poco a poco empiezas a entender su idioma. Llega un día en el que te sientes capaz de dialogar con ellas. La amistad se ha forjado.

Con las expresiones regulares ocurre como con los frameworks de desarrollo. La curva de aprendizaje suele ser lenta, pero siempre acaba mereciendo la pena. Son las encargadas de poner orden en los caos con los que muchas veces tienen que lidiar nuestros pobres procesos.

Gracias a ellas podemos confeccionar laboriosas expresiones como por ejemplo “Quiero saber cuales son todas las palabras que preceden a todos los números de 4 cifras que no terminan en 2″. Inventate una condición, seguro que se puede construir.

AVISO: No he sometido a prueba ninguno de los ejemplos que aquí pongo.

Lanzado PHP 5.3.0

Hoy por fin PHP ha lanzado su última versión, la 5.3.0. Se ha hecho esperar, pues desde noviembre de 2006 estamos con la rama 5.2. Esta release mayor trae numerosas novedades que seguro nos ayudarán muchísimo en nuestros futuros proyectos. Además, es igualmente útil para ir adaptándonos a las funcionalidades que traerá PHP 6.0.

Para aquéllos que queráis actualizaros a PHP 5.3.0, han creado una guía de migración. desde donde tenemos acceso a la lista de incompatibilidades con la rama 5.2 al igual que una lista de nuevas funcionalidades:

  • Añadido soporte para espacios de nombres.
  • Añadido soporte para Late Static Bindings.
  • Añadido soporte para salto a etiqueta (limited goto).
  • Añadido soporte para Clausuras (funciones Lambda/Anónimas).
  • Hay dos nuevos métodos mágicos: Se han añadido __callStatic y __invoke.
  • Soporte para sintaxis de Nowdoc, y funciona como Heredoc pero con comillas simples.
  • Ahora es posible utilizar Heredoc para inicializar variables estáticas y constantes de clases.
  • Ahora la sintáxis de Heredoc puede declararse usando comillas dobles.
  • Ahora se pueden declarar Constantes usando la palabra clave const fuera de la definición de una clase.
  • El operador ternario ahora tiene un operador atajo ?:.
  • El wrapper de flujos HTTP ahora considera exitosos todos los códigos de estado entre 200 y 399.
  • Ahora es posible el acceso dinámico a métodos estáticos.
  • Se pueden anidar Excepciones.
  • Se ha añadido y activado por defecto el Recolector de Basura.