miércoles, 23 de junio de 2010

Configurar PHP, Apache y MySql en Windows

O cómo crear un servidor WAMP (Windows, Apache, MySql, PHP), que es lo mismo.

Para ir en orden, lo primero que necesitamos es una máquina Windows, y asegurarnos de tener apagado el servicio de http del IIS (si está instalado) o que no esté en el puerto 80.

Luego necesitamos tener los 3 componentes, el Apache, PHP y MySql. El paquete completo de PHP para Windows lo podemos conseguir en el sitio oficial php.net en ésta dirección http://windows.php.net/download/ Escoja alguna de las versiones VC6. Las VC9 son para IIS.

Siempre traten de configurar la más reciente version, y sólo retrocedan si hay problemas de compatibilidad.

El Apache se consigue en el sitio de Apache Foundation en ésta dirección http://httpd.apache.org/download.cgi

Para MySql, se puede bajar un instalador del MySql Community Server aquí http://dev.mysql.com/downloads/mysql/

Podemos instalar MySql y Apache en cualquier órden, pero instalemos PHP después del Apache Server.

Una vez que tenemos el zip de PHP, descomprímalo y coloquelo en el lugar de su elección. Yo siempre lo instalo en C: para tener paths cortos y evitar comportamientos no deseados con los espacios. Es bueno agregar el path donde está php-win.exe en PATH de las variables de entorno.

PHP viene con un php.ini preconfigurado para production o development. En ésta parte del archivo:

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
; extension_dir = "ext"

cambiamos extension_dir a apuntar a la dirección de la carpeta ext, que es donde se encuentran algunas extensiones de PHP, algunas de las cuales vamos a habilitar para poder usar MySql en PHP.

Más abajo encontramos esto:

; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)
; extension folders as well as the separate PECL DLL download (PHP 5).
; Be sure to appropriately set the extension_dir directive.

A partir de aquí, se puede descomentar las líneas de las extensiones que necesitemos. Para habilitar MySql descomentamos

;extension=php_mysql.dll

o

;extension=php_pdo_mysql.dll

dependiendo de las necesidades que tengamos, por ejemplo, Magento y Drupal necesitan php_pdo_mysql.dll

Con esto terminamos por ahora la configuración de PHP.

Para configurar Apache, buscamos el archivo httpd.conf dentro de la carpeta conf, este es el archivo de configuración de Apache.

Después de todas las declaraciones de módulos LoadModule, escribimos ésto:

LoadModule php5_module "c:/php/php5apache2.dll" Para Apache 2

o

LoadModule php5_module "c:/php/php5apache2_2.dll" Para Apache 2.2


Y más abajo, después de las declaraciones AddType, escribimos ésto

AddType application/x-httpd-php .php

para agregar php a los archivos que Apache es capáz de manejar.

Con ésto, ya deberíamos tener lista nuestra configuración, ahora le damos stop y luego start al apache monitor en el tray icon de apache para cargar la nueva configuración y probamos si en localhost podemos ver php. Yo lo que hago siempre es poner un archivo php en el root de localhost, con este simple código:

<?php phpinfo(); ?>

Luego lo abrimos en un browser, y debería aparecer la tabla morada con información detallada de la configuración de PHP. En especial buscamos que existan los títulos mysql y pdo_mysql que nos indica que las extensiones cargaron correctamente, y que podemos usar funciones mysql en nuestros scripts php.

martes, 22 de junio de 2010

Cómo cargar contenido mediante AJAX con YUI3?

La librería YUI ofrece una gama amplia de posibilidades para cargar contenido dinámicamente mediante llamados de http. La clase IO es la encargada de manejar toda la parte de transacciones en YUI.

Primero, ponemos tags html básicas e incluimos YUI3 a nuestra página html:

<html
>
<head>
<script type="text/javascript" charset="utf-8"
src="http://yui.yahooapis.com/3.1.1/build/yui/yui-min.js"
>
</script>

luego incorporamos nuestro código a la página, mediante otro llamada JavaScript y cerramos el head:


<script type="text/javascript" charset="utf-8"
src="io.js"
>
</script>
</head>


El resto de la página es un solo un div que va a funcionar de contenedor para el contenido que vamos a invocar mediante AJAX:


<body>
<div class="container"></div>
</body>
</html>


Ahora en nuestro archivo io.js llamamos la función principal YUI.use:

YUI().use("node", "io-base", function(Y) {
//TODO
)};

Vamos a usar las librerías node y io-base.

Seguidamente, dentro de la función use, asignamos el url del recurso a una variable uri, y construimos 2 funciones, una que se va a ejecutar cuando la transacción finalice, y otra que se ejecuta en caso de error, complete y failure:

var uri = "data.xml";

function complete(id, o, args) {
var id = id;
var args = args;
var data = o.responseText;
var container = Y.one(".container");
container.set("innerHTML", data);
};
function failure(id, o, args) {
alert("Transaction Failed");
};

Los parámetros que YUI ofrece a ésta función son id, o y args, que pueden ser cambiados a cualquier otro nombre siempre y cuando se respete la nueva nomenclatura y el orden, por ejemplo, pueden ser llamados complete(transaccion, objeto, argumentos). El primer parámetro id, es el id de la transacción, el segundo es el objeto http que contiene todos los datos del cuerpo del llamado. El último parámetro es un objeto utilitario que podemos usar para enviar otros parámetros a la función.

Para nuestro ejemplo, el objeto o es el que nos interesa, pues contiene la propiedad responseText, que es una representación textual del llamado http. Finalmente escogemos un nodo con Y.one para meter el dato mediante set("innerHTML").

Finalmente, asignamos los eventos complete y failure a las funciones antes declaradas, y hacemos el llamado AJAX:

Y.on('io:complete', complete, Y);
Y.on('io:failure', failure, Y);

var request = Y.io(uri);

Al llamarse la función Y.io con la dirección del recurso (uri) como parámetro, es cuando se hace el llamado http.