octubre 09, 2011

WebMatrix : Using PHP on IIS Server



Recuerde que..
Este blog esta desarrollado en idioma español pero utilizando Google Traductor puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a Integracion Google.

...y continuando con nuestra investigación respecto a WebMatrix: la plataforma opensource de Desarrollo Web de Microsoft, empezamos ahora a revisar las ventajas y posibilidades que nos presenta instalar y trabajar con el lenguaje PHP dentro del entorno de Desarrollo del servidor IIS y el lenguaje ASP.Net (aparte que nos permite integrarnos y trabajar fácilmente con la base de datos SQLServer compact instalado en la plataforma... y que cuyas formas de conexión y funcionamiento se encuentran detallados en el Tutorial WebMatrix cuyas direcciones adjuntamos en nuestra entrega anterior.

Ya desde nuestra primera entrada empezando desde cero que dió inicio a las investigaciones de nuestro proyecto Integración Google, les habíamos indicado que el lenguaje PHP, integrado completamente al servidor Apache en nuestra instalación de Appserv, es sólo un componente del servidor, y que incluso podía ser instalado de manera independiente; el caso es que al instalar Appserv, u otro servidor similar como XAMP, WAMP, etc, el lenguaje PHP ya viene integrado a nuestro entorno de desarrollo, pero ahora con WebMatrix, es propicia la oportunidad para ver a PHP trabajando en otro entorno de desarrollo distinto al servidor Apache.

En el caso de WebMatrix, el proceso de instalación de PHP al servidor IIS Express es totalmente automático... Solo basta ingresar a la opción "configuración" de alguno de nuestros proyectos o "sites", y allí marcar la opción correspondiente. El hecho es que, al hacer esa indicación, WebMatrix, nos solicitará que le indiquemos que versión del lenguaje deseamos instalar, la versión 5.2 ó 5.3, en nuestro caso elegimos la versión 5.2 pues nuestros desarrollos no tienen ninguna figura especial del lenguaje PHP que hayamos utilizado... pero bien pueden seleccionar la versión 5.3 que ya es estable....y listo, el proceso se empieza a realizar en forma automática (toma sus minutos.. pero no hay nada más que hacer), al final va a aparecer marcada nuestra casilla PHP, habilitada en la versión que elegimos... tal vez si vale resaltar, que una vez instalado PHP, el lenguaje estará disponible para todos nuestros proyectos y no solo para uno en particular, vale decir, se habilita el servicio para todo nuestro entorno de desarrollo, como es que caso en Appserv,. por mencionar un servidor que ya nos debe resultar cada vez más familiar...

Cabe también resaltar que, PHP no solo es instalable en el entorno de desarrollo de un servidor Apache e IIS ...no forma parte de los alcances de este codelab revisar al detalle de todas las posibilidades de PHP, pero vale resaltar que, al descargar PHP, para ser instalado de forma independiente desde su pagina oficial, y al efectuar el proceso, PHP, durante su instalación, nos pedirá que seleccionemos el servidor Web sobre el cual trabajará, y aparte de los ya mencionados, tenemos al servidor Xiami, Microsoft PWS.. y hay una opción otros, y en la cual, la configuración por la parte del servidor tendría que efectuarse de forma manual.. como es el caso si deseamos instalar PHP sobre un servidor Tomcat, que tiene sus pasos, pero también es posible... el caso es que tener al lenguaje PHP, sobre el servidor que utilicemos, representa enormes ventajas, por cuanto PHP es un lenguaje bastante consolidado, y que nos presenta múltiples herramientas ya desarrolladas y listas para poderlas usar (como el manejo del formato JSON entre otros, ó la instalación de "servicios sociales" o de gestión de contenidos muy populares como Wordpress, Drupal, etc. los que han sido desarrollados utilizando PHP, y que varios de ellos, han sido completamente integrados a la plataforma de Desarrollo de WebMatrix, facilitando su instalación, adecuación y uso), y todo ello nos debe permitir que, unido a los conocimientos que podamos ó requerir tener de alguna otra plataforma de desarrollo en particular, pues puede facilitarnos bastante nuestro trabajo, tiempos de programación e integración de proyectos...( como un ejemplo, pueden revisar este enlace que nos muestra el proceso de instalación de PHP sobre un servidor IIS "convencional", es decir, el que viene instalado en WindowsNT Server ó Windows XP ó Window 7, etc. )


Instalando nuestros codelabs "Using the Back-End PHP+MySQL e Integracion Google 3ra parte" sobre WebMatrix:

(Una vez instalado WebMatrix en nuestro ordenador, por supuesto)

Nuestros codelabs referidos al uso del Back-End PHP+ MySQL esta dividido en tres partes, los que son: 1.- Iniciándonos, que nos muestra un modelo CRUD -opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos; 2.- Temas de Seguridad y Wizards (acceso), que muestra el mismo desarrollo anterior pero considerando una pantalla de acceso para poder utilizar dicha aplicación...y a la que le hemos acondicionado componentes dinámicos respecto al manejo de idioma de nuestro navegador ( la API language de Google, cuyo efecto podemos observar al cambiar el idioma de nuestro navegador...para ello, siga la ruta : Herramientas, Opciones, Avanzado, Contenido Web y Configuración de Idiomas en Google Chrome si están utilizando dicho navegador por supuesto); y por último, tenemos a nuestro codelab Integración Google 3ra parte, que muestra un Modelo TreePanel de visualizaciones Google y ExtJs, además de visualización de Google Maps, y nuestro modelo CRUD de Mantenimiento de la tabla de presidentes utilizada en los dos primeros codelabs referidos, la que hemos unido al ejercicio en este caso, como muestra de como unir componentes ExtJs sobre en nuestros propios proyectos.

Cabe resaltar asimismo que, estos codelabs son referidos al Back-End PHP+ MySQL corriendo sobre WebMatrix, pero como solo involucran a los componentes nativos de un servidor AppServ; entonces para el caso de las bases de datos requeridas para los ejercicios recomendamos efectuarlas sobre el mismo servidor MySQL ya instalado con  Appserv, pues cabe indicar que, sobre un mismo ordenador, no tiene ningún sentido tener instalado varios servidores MySQL - aunque es posible, si se configuran para puertos diferentes - y para ello, debemos utilizar la herramienta phpMyAdmin también disponible en nuestro servidor Appserv.

Y por supuesto, como tal vez han podido intuir, también es posible correr en el entorno de desarrollo de Appserv éste material de apoyo que les entregamos para probar sobre WebMatrix, y con la ventaja de que, como en WebMatrix, cada proyecto o "site" es independiente, pues en esta oportunidad, los descargables de cada "codelab" contienen todo lo necesario para su funcionameinto ( incluido la versión "liviana" de ExtJs-3.4.0 utilizada en esta oportunidad para cada codelab). Por ello, conviene descargar o copiar nuestro material de apoyo dentro de la carpeta "www" de nuestro servidor Appserv (u otro servidor equivalente utilizado), y con ello, los podríamos poner en funcionamiento inclusive en ambas plataformas en forma simultánea... llamando desde el localhost, más nuestra ruta de descarga, en la barra de direcciones de nuestro navegador... ó desde WebMatrix, al cargar estos proyectos o "sites", llamarlos desde esta posición de descarga directamente a WebMatrix, y ejecutarlos de allí, como se indicó en el codelab anterior, referido a nuestros primeros conceptos respecto a WebMatrix, y de donde ya debemos haber ejecutado nuestros proyectos Integración Google 1ra. y 2da. parte... vale decir, si en esta oportunidad va ejecutar por primera vez los codelabs, y si por supuesto utilizamos las bases y tablas MySQL requeridas ( adjuntamos para ello los archivos sql necesarios ), pues nuestros ejercicios deberían funcionar directamente sin necesidad de hacer alguna configuración adicional; pero en el caso de haber ya realizado la instalación de los codelabs anteriores mencionados, podrá "sobreescribir" las bases de datos requeridas con la misma información de los archivos sql contenidos en el material de la descarga.

Material de Apoyo : 
( do click on blue icons to download )

Grid-PHP-MySQL.rar, que corresponde a nuestro codelab "iniciándonos" sobre el Back-End PHP+ MySQL,  proyecto desarrollado tomando como referencia un tutorial de la pagina Oficial ExtJs, cuyo código por supuesto hemos mejorado y que corre ahora sobre la versión ExtJs-3.4.0; y que nos presenta un modelo CRUD -opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos.


Using the Back-End PHP+MySQL (Getting Started) corriendo sobre WebMatrix :



Este codelab trabaja con la base de datos "tutorial", para ello deberá crear primero con la herramienta phpMyAdmin dicha base de datos, y luego importar sobre ella las tablas y datos requeridos desde el archivo pdtes_usa.sql incluído en la descarga ( si ya tiene instalada la base de datos tutorial, la importación borrará las tablas "presidents", "parties" y "usuarios" requeridas, e insertará la data necesaria para realizar ejecutar nuestro ejercicio.

Recuérdese asimismo que en el archivo database.php, y con el comando msql_connect debemos verificar nuestros datos para conectarnos a la base de datos (host, usuario y password), y con el comando msql_select_db se indica el nombre de la base de datos donde hemos importado las tablas y datos contenidos en pdtes_usa.sql (tutorial es el que hemos utilizado).

Pueden también revisar nuestra entrada : Using the Back-End PHP+MySQL ( Getting Started ) donde mostramos con mayor detalle el contenido de cada componente del codelab, aunque en esa oportunidad, las mostramos para instalar y hacer funcionar este proyecto sobre el entorno de desarrollo de Appserv ( servidor Apache+ PHP+ MySQL), pero cuyos conceptos, como ya hemos indicado, son completamente compatibles para utilizarlos sobre este entorno de desarrollo de WebMatrix, por cuanto, de dicha plataforma, en esta oportunidad solo estamos utilizando al servidor IIS  y el lenguaje PHP instalado sobre ella... y el funcionamiento del servidor IIS es similar al del servidor Apache para este caso, por cuanto no estamos utilizando ningún código ASP.Net ó C# asociado a dicho entorno.

Wizard-sample.rar, que corresponde a nuestro codelab "Temas de Seguridad y Wizards (acceso)" referidos al Back-End PHP+ MySQL,  donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando en consideración pantallas de acceso (Wizards) y revisando que opciones de seguridad debemos empezar a considerar en ellos. Este codelab hace referencia a como poder acceder (ó restringir el acceso a usuarios no autorizados) a nuestro modelo CRUD del codelab anterior, y para ello hace uso de los datos registrados en la tabla usuarios creada al importar pdtes_usa.sql sobre la base de datos "tutorial" ya creadas.

Para este codelab en la base de datos Tutorial debemos agregar manualmente la tabla usuarios que debe tener como mínimo los campos: ID (int, primary key e auto-incremental(, usuario, varchar(15); y password también varchar(15)... y allí indicar los valores de nuestro usuario y password de acceso (passer, passer por ejemplo). Las generalidades de configuración y conexion a la base de datos Tutorial los podemos observar al inicio del archivo index.php (donde nos conectamos a la base de datos mediante mysql_connect y mysql_select_db), y a partir de la línea 242, donde se verifica que nuestro nombre de usuario y password se encuentren registrados en la tabla usuarios.

Using the Back-End PHP+MySQL (Wizard and safety themes) corriendo sobre WebMatrix :



Pueden también revisar nuestra entrada : Using the Back-End PHP+MySQL ( Wizard & Safety themes) donde mostramos con mayor detalle el contenido de cada componente de este interesante codelab, y en que se detallan una de la principales formas de uso del lenguaje PHP en lo que respecta al manejo de base de datos, cookies y enlace entre diferentes páginas PHP.. y por supuesto, como ya hemos indicado, este proyecto lo podemos correr desde WebMatrix ó desde el entorno de desarrollo de Appserv, como ya hemos indicado...


Int-Google03.rar, que corresponde a nuestro codelab "Integracion Google 3ra parte" referidos al Back-End PHP+ MySQL, donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando el consideración el enfoque de uso que nos ofrece ExtJs (uso de un menu TreePanel, al que se accede por una pantalla de acceso Wizard, y de manejo de stores y la forma de conexión utilizando  PHPa la base de datos MySQL, lo que finalmente nos permiten acceder a las diferentes visualizaciones  Google y ExtJs que hemos venido presentando en nuestros codelabs, incluyendo en esta oportunidad, al Modelo CRUD de Mantenimiento de listado de presidentes que hemos utilizado en los dos codelabs anteriores que forman parte de esta entrega.

Este ejercicio trabaja con las bases de datos IGCodelab contenidos en igcodelab.sql (datos de productos de belleza), y la base de datos Tutorial (donde tenemos registrados a los presidentes USA contenidos en pdtes_usa.sql). Pero en esta oportunidad, el nombre y password del usuario para acceder al Modulo son los contenidos en la tabla usuarios de la base de datos IGCodelab. Los datos que conexión a la base de datos IGCodelab, y la grabación de cookies empleadas a lo largo del modulo, son detalladas en drivers.php, y el chequeo del usuarios se detalla en database.php en la función getuser(), a partir de la linea 63 del código.

Integracion Google 3ra. Parte corriendo sobre WebMatrix :




Pueden también revisar nuestra entrada Integracion Google (3ra parte) donde mostramos con mayor detalle el contenido de cada componente del codelab...

NOTA: los ejercicios funcionan sin mayor problema tal como los presentamos, pero para los codelabs Grid-MySQL e Int-Google03, como podrá verificar, los archivos *.php involucrados utilizan codificación ANSI, aún cuando lo recomendado cuando trabajemos en nuestros proyectos web es que como norma todos nuestros archivos sean construidos con la codificación UTF-8.... Ocurre que cuando se trabaja con cookies (como es el caso de estos codelabs), puede haber restricciones para el uso de la función setcookie(), por cuanto PHP por defecto, restringe las salidas del buffer del servidor luego que se haya cargado o ejecutado algun script HTML... (puede revisar la documentación al respecto): y en el caso de los dos codelabs mencionados, como puede fácilmente observar, por la forma en que se encuentran construidos los ejercicios, primero se cargan a los archivos index.html, y luego durante el proceso se invoca a los respectivos archivos *.php para interactuar con la base de datos MySQL. Esta restricción puede superarse convirtiendo a codificación ANSI los archivos *.php que invocan a las funciones setcookie(), o configurando nuestro archivo PHP.ini, indicando a la directiva:  output_buffering=on (su valor por defecto es off).

La documentación no indica al detalle la causa de esta salvedad pero pueden verificar - utilizando Firebug de Firefox para hacer sus pruebas - que al convertir los archivos *.php del proyecto Int-Google03 a codificación UTF-8 (utilizando notepad++ u otro editor), y en especial al archivo drivers.php que se utiliza primero para la grabación de los cookies, este arroja  por la consola de inspección el warning : "Cannot modify header information - header alreaqdy sent by..",.y nos indica las líneas de nuestras instrucciones setcookies(); y por supuesto, no funciona la carga de datos, o mas propiamente dicho, se bloquea la salida de datos desde el buffer del servidor, aún cuando la información haya sido "capturada"...

Este impase, como hemos indicado, se soluciona al convertir nuevamente a ANSI nuestro archivo drivers.php... o también podemos reconfigurar nuestro PHP.ini en la directiva: output_buffering=on, y en este ultimo caso, aún cuando nuestros archivos PHP sean codificados UTF-8 si se permitirá la "salida" de la información y el ejercicio funcionará sin inconvenientes.

Lo indicado anteriormente ocurre al trabajar con un servidor Apache en una plataforma LAMP o WAMP, pero cuando trabajamos con WebMatrix NO ocurren estos problemas, y es indiferente que nuestros archivos *.php sean codificados UTF-8 ó ANSI, pero como siempre, para nuestros proyectos, debemos verificar su funcionamiento antes de su  puesta en producción para evitar contratiempos.

Saludos
@Mlaynes




No hay comentarios: