domingo, marzo 25, 2012

Microsoft Drivers 3.0.1 for PHP for SQL Server - Soporte para PHP 5.4!

Finalmente (y en tiempo record!) Microsoft lanzó una actualizacion de sus drivers PHP para conectar a SQL Server, con el fin de soportar PHP 5.4.

El link de descarga de los drivers es el mismo de la version 3.0, pero en la pagina se nombra como "3.01"
http://www.microsoft.com/download/en/details.aspx?id=20098

Atencion: esta nueva version REQUIERE la instalacion del Cliente Nativo de SQL Server 2012 (aunque se conecten a bases de datos 2008, por ejemplo).

Este cliente nativo puede obtenerse de:
http://www.microsoft.com/download/en/details.aspx?id=29065

Mi primer test con ADODB 5.15, PHP 5.4 sobre WIN7X64/IIS7.5 (excelente la posibilidad de switchear versiones de PHP!), una base de datos SQLServer2008 Express, fue perfectamente. Seguiremos esto de cerca.

miércoles, marzo 14, 2012

El camino IIS 7 + PHP 5.4 + MSSQL DRIVERS 3.0

El plan sigue siendo IIS 7 (Windows 2003 o Windows 7), SQL Server Express y PHP por supuesto.

Bien, Salio PHP 5.4 con pocas pero fantasticas novedades (incluyendo un web server embebido!).
Los elementos, actualizados:

- "Microsoft Drivers 3.0 for SQL Server for PHP": Las DLL desarrolladas por Microsoft, compatibles con PHP para IIS 7, que permiten una conexion nativa a SQL Server. Esta version 3.0 es reportada como una mejora importante. Sin embargo, aun (14 de marzo 2012) no es compatible con PHP 5.4. Mientras esperamos, aqui hay un adelanto de un driver modificado para 5.4 http://social.technet.microsoft.com/Forums/da-DK/sqldriverforphp/thread/28494780-38a2-432f-8dae-8e609070da7b

- "PHP 5.4": Por supuesto la nueva estrella de PHP. Aunque a este momento la version recomendada seria 5.3.10 (que se puede instalar por Web Platform Installer) para trabajar con IIS, esta disponible la version 5.4 en http://windows.php.net/download/

- El cliente nativo: Un tema que no hay que pasar por alto... Hay versiones 9, 10, 11. Esto se instala basicamente con cada SQL Server (Express). No lo mencione antes, pero la estrella de Microsoft ahora es SQL Server Express 12, con LocalDB como principal atractivo. Sobre el cliente 11 http://msdn.microsoft.com/en-us/library/ms131321(v=sql.110).aspx

lunes, junio 20, 2011

WISP: Windows + IIS + SQL Server + PHP

Tras lograr un exito con MSSQL y sus nuevos drivers en XAMPP (php sobre apache), necesito intentar la opcion de utilizar PHP y MSSQL (SQL Server 2008) en IIS (5.1 en XP o 6 en 2003). La opcion ha resultado muy beneficiosa hasta ahora para un entorno intranet.

Trabajos realizados:
- Verificar que Windows XP esté a nivel SP3. Requerido por algunas herramientas (WebMatrix por ej)
- Acceder al Web Platform Installer (WEB PI) desde  http://www.microsoft.com/web/platform/. Esta aplicacion nos permitirá instalar diversas herramientas.
- Instalar IIS5.1 en XP o IIS6 en 2003 desde el instalador de Windows.

- Instalar PHP5.3 de WEB PI (o de la pagina de PHP). La version deberia ser la Non Thread Safe para que sea compatible con FastCGI. Al tener XAMPP en mi pc lo instalé sobre el directorio c:\phpiis.

- Instalar FastCGI desde WEB PI. Luego de instalar, en IIS se verá todo requerimiento de .php pasar por el fcgiext.dll.
- Bajar e instalar MSSQL Express 2008 R2
- Las tools de conectividad y management del mismo (Management studio y eventualmente Migration assistant)
- El driver PHP (dll) para conectarse al SQLServer, de Microsoft (!). Hasta ahora la ultima version es 2.01.
Para IIS/FastCGI utilicé php_sqlsrv_53_nts_vc9.dll, configurado en el php.ini correspondiente como extension. Verificar usando phpinfo().
- ADODB y otras librerias de php necesarias.

sábado, marzo 26, 2011

IIS5.1 Troubleshooting y Administracion de Usuarios/Passwords en XP

Para XP, el IIS disponible es la version IIS 5.1, que se puede instalar desde "Agregar componentes de Windows". Sin embargo, da trabajo el hacerlo funcionar.

Lo que me a mi me funcionó despues de mucho trabajo es lo siguiente:

1) Cambié el nombre de mi PC hace un tiempo y desinstale el IIS.. por lo que se ve que quedaron las cuentas de IWAM_ y de IUSR_ de la pc anterior (ej: IWAM_NOMBREVIEJODEPC)

2) Para evitar confusiones, usando el truco de abajo borré las cuentas anteriores de IWAM_ y de IUSR_ y me aseguré de que estuvieran las nuevas, que tuvieran la misma password y de que fueran del grupo administradores. Tambien habia probado la opcion de microsoft para igualar claves .. http://support.microsoft.com/kb/297989 pero no funcionó.

3) En el interin descubri que no necesito la IWAM_ si pongo la seguridad en "low".
Luego de ese cambio, XP está funcionando correctamente con PHP/FASTCGI (instalacion hecha anteriormente).

TRUCO
Para utilizar el administrador de usuarios avanzado de XP, en lugar de la opcion default para niños, tipear lo siguiente, luego de Start, Run:

control userpasswords2

Fuente(s):
http://www.pcreview.co.uk/forums/iusr-account-cannot-find-windows-xp-pro-t152395.html

De MYSQL a MSSQL (Express)

MYSQL es un "no-brainer" para PHP (LAMP en linux o WAMP en windows). Esta totalmente integrado, probado, y corriendo en muchisimas aplicaciones de alta exigencia en la web.

Pero a veces en el entorno de trabajo (intranet) es necesario trabajar con herramientas de Windows.

El plan es:
- Usar PHP, en lo posible con IIS6 en Windows 2003.
- SQLServer Express 2008 como base de datos, luego escalable a una version standard+.
- Emplead aplicaciones de escritorio que trabajen administrando los datos/esquemas de SQLServer Express.

Entorno elegido:
- Estoy usando ADODB en PHP 5 para facilitar el eventual cambio de base de  datos, con un SQL lo mas standard posible.
- Para migrar los datos, que inicialmente diseñé en MYSQL, la mejor herramienta parece ser el SQL Server Migration Assistant 2008 for MySQL (que se puede bajar del WEB Platform installer o WEB PI)
Nota: SQL Server Management Studio tambien tiene herramienta de import/export para multiples fuentes de datos (access, excel, odbc, largo etc)

Sobre el Migration Assistant for MySQL
Va a protestar por el SQL Server Agent, pero hacer click en Continue y todo funciona OK.
- Hay que ser cuidadoso.. Primero hay que conectarse al MYSQL, luego al SQLServer.
- Segundo, hay que migrar el schema de datos (estructura de las tablas)
- Tercero, habria que sincronizar en el frame de abajo (de SQLServer) los cambios con la base de datos.
- Finalmente, hacer click en "Migrate Data" para pasar la data del MYSQL al SQLServer.

Un gran time saver, sin duda.

viernes, marzo 25, 2011

SQL Server con Apache/PHP, Pasos

(EN CONSTRUCCION)

Elementos instalados (Windows XP):

  1. Verificar que Windows XP esté a nivel SP3. Requerido por WebMatrix.
  2. XAMPP 1.7.4 (PHP 5.3.5)
  3. Herramientas Microsoft usando Web Platform installer (Web PI). Un gran producto que permite bajar diversas tecnologias web (IIS, WebMatrix, MSSQL Express, y varias cosas mas). Serian:

1. MSSQL Express 8.0 R2

2. Las tools de conectividad y management del mismo

3. El driver PHP (dll) para conectarse al SQLServer, de Microsoft (!). ATENCION. Hay versiones varias! por ahora la ultima es la 2.0.1 y esta aqui.

  1. Configurar
    1. Copiar el php_sqlsrv_53_ts_vc6.dll de la pila de archivos de microsoft a c:\xampp\php\ext
    2. Verificar si la instalacion es Thread Safe o no. El XAMPP parece tener una version Thread Safe. Aparentemente para Non Thread Safe, seria el *.exe de PHP y permite usar por ejemplo FastCGI. Buena opcion a investigar para IIS.
    3. Modificar el C:\xampp\php\php.ini para que tenga la linea:

extension=php_sqlsrv_53_ts_vc6.dll

  1. Rearrancar el Apache con el XAMPP Control center

Test:

  • Usar el phpinfo() para ver si aparece un apartado con la extension sqlsrv
  • Crear un php de test usando las funciones nativas PHP de MS.

require_once ("../inc/adodb5/adodb.inc.php") ; // database access objects

$dbinfo = array( "UID"=>"sa",

"PWD"=>"password",

"Database"=>"people");

// get resultset as associative array

$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;

// Unique $DB handle

$DB = NewADOConnection('mssqlnative');

$DB->Connect("NUMBER23\SQLEXPRESS", $dbinfo ["UID"], $dbinfo ["PWD"], $dbinfo ["Database"]);

if (!$DB) die("DB Connection failed.");

$sql = "SELECT * FROM head_mst";

$rs = $DB->SelectLimit($sql, 10, 1) or die("Error in query: $sql ");

while (!$rs->EOF) {

echo $rs->fields['first_name'] . "
";

$rs->MoveNext();

}

  • Crear un php de test pero con las funciones de ADODB:

require_once ("../inc/adodb5/adodb.inc.php") ; // database access objects

$dbinfo = array( "UID"=>"sa",

"PWD"=>"password",

"Database"=>"people");

// get resultset as associative array

$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;

// Unique $DB handle

$DB = NewADOConnection('mssqlnative');

$DB->Connect("PCNAME\SQLEXPRESS", $dbinfo ["UID"], $dbinfo ["PWD"], $dbinfo ["Database"]);

if (!$DB) die("DB Connection failed.");

$sql = "SELECT * FROM head_mst";

$rs = $DB->SelectLimit($sql, 10, 1) or die("Error in query: $sql ");

while (!$rs->EOF) {

echo $rs->fields['first_name'] . "
";

$rs->MoveNext();

}

La gran ayuda esta aquí:

http://msdn.microsoft.com/en-us/library/cc296170.aspx

lunes, marzo 14, 2011

Web Dev desde cero: Web 2.0 Conceptos (Aprendiendo)

Como siempre, Wikipedia es tu amigo:

Para un programador desktop, pasarse a un entorno web abierto puede ser un viaje alucinógeno. Ese es mi caso, asi que aqui estamos aprendiendo y dejando un diario de ese aprendizaje por metodo error/acierto.

Algunos conceptos de este articulo a tener en cuenta:

1) Tecnologias base:
"The client-side/web browser technologies used in Web 2.0 development are Asynchronous JavaScript and XML (Ajax), Adobe Flash and the Adobe Flex framework, and JavaScript/Ajax frameworks such as Yahoo! UI Library, Dojo Toolkit, MooTools, and jQuery. Ajax programming uses JavaScript to upload and download new data from the web server without undergoing a full page reload."

Rescato claramente que Javascript/AJAX/XML/JQUERY o equivalentes son las estrellas del nuevo paradigma, donde la intencion principal es evitar, donde tenga sentido, que la pagina web se recargue totalmente.

- Javascript: como lenguaje cliente, ameno, poderoso y muy flexible.
- Ajax: como una práctica basada en una objeto relativamente sencillo (en principio diriamos de Javascript) para proporcionar un metodo de carga de datos de otra URL y cuyo proceso es en general "asincronico". O sea: se carga en "background" mientras la pagina principal permanece inamovible. Al terminar este proceso Ajax, se devuelve una respuesta, quiza un conjunto de datos que podrian mostrarse en un DIV u otro elemento de pagina, sin recarga completa de la misma.
- JQuery: Maravillosa libreria, junto con Javascript un verdadero motivo de asombro y de apertura de ojos para un programador tradicional. Muy flexible. Permitirá simplificar mucho el proceso de Ajax y ademas, librarnos del problema de la compatibilidad de navegadores.

No observo en el articulo la mencion de CSS, como elemento base de la Web 2.0. Despues de todo es gracias a los selectores CSS que implementaciones como JQuery tienen sentido. Mas que nunca se deberá trabajar con una buena hoja de estilo CSS, bien definida, que permita separar TANTO como sea posible el formato del contenido; el HTML/XHTML deberia ser lo mas limpio posible, dedicado a armar la estructura de la pagina (y en la salida, claro, sus datos).

2) Intercambio de datos

"The data fetched by an Ajax request is typically formatted in XML or JSON (JavaScript Object Notation) format, two widely used structured data formats. Since both of these formats are natively understood by JavaScript, a programmer can easily use them to transmit structured data in their web application. When this data is received via Ajax, the JavaScript program then uses the Document Object Model (DOM) to dynamically update the web page based on the new data, allowing for a rapid and interactive user experience. In short, using these techniques, Web designers can make their pages function like desktop applications. For example, Google Docs uses this technique to create a Web-based word processor."


XML o JSON. La verdad XML es muy comprensible, pero siempre me ha dado un poco de complicacion. En cambio JSON me parece absolutamente pulcro y programatico. Y es soportado por muchos lenguajes, para "codificar" y enviar data al servidor del ajax y tambien para recibir la data de vuelta del mismo.

Ejemplo visualmente MUY claro de como conformar una estructura JSON:

{
     "firstName": "John",
"lastName": "Smith",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}

Notar el uso de [] para arrays y de {} para Objetos. Muy consistente.

3) Server side/Integration
"On the server side, Web 2.0 uses many of the same technologies as Web 1.0. New languages such as PHP, Ruby, ColdFusion, Perl, Python, JSP and ASP are used by developers to dynamically output data using information from files and databases. What has begun to change in Web 2.0 is the way this data is formatted. In the early days of the Internet, there was little need for different websites to communicate with each other and share data. In the new "participatory web", however, sharing data between sites has become an essential capability. To share its data with other sites, a web site must be able to generate output in machine-readable formats such as XML, RSS, and JSON. When a site's data is available in one of these formats, another website can use it to integrate a portion of that site's functionality into itself, linking the two together. When this design pattern is implemented, it ultimately leads to data that is both easier to find and more thoroughly categorized, a hallmark of the philosophy behind the Web 2.0 movement."

Ok, hay que elegir un lenguaje del lado de servidor. Para mi es basicamente PHP. Pero hay cosas muy interesantes en todos los demas. Y a compartir: mas que una necesidad "de redes sociales" (lo cual suena muy Facebook-trivial) existe la posibilidad de compartir funcionalidades entre aplicaciones y sitios.

Supongo que aqui entra REST, los WebServices y mas, pero eso es ya mucho por hoy.