Saturday, February 09, 2013

PHP tambien la rompe con SAP HANA! (Version Linux)


Si me conocen...saben que no fanatico de Linux...sin embargo...todavia tengo mi laptop LG T1 Express Dual que compre en el 2007...para mi primer SAP TechEd...como se daran cuenta...correr Windows e instalar mas software en esta laptop era una manera de matarla lentamente...asi que la laptop se quedo en mi ropero por un buen tiempo...hasta que decidi instalarle Ubuntu y regresarla a la vida una vez mas -:)

Lo que dicen es cierto...aun la mas vieja y lenta laptop se comporta de maravilla con Linux...y para su informacion, estoy escribiendo este blog en mi laptop con Linux -;)

Hace un par de semanas escribi un blog llamado PHP tambien la rompe con SAP HANA! puesto que me di cuenta de que no habria escrito sobre PHP y SAP HANA y tambien porque sabia que habia mucha gente que tenia muchos problemas tratando de hacerlos funcionar juntos...pero...lo escribi para Windows...y los usuarios de Linux continuan luchando para lograr hacer esto funcionar...asi que...hora de un nuevo blog...

Debo confesarlo...sin este increible blog HANA with odbc on Ubuntu 12.04 escrito por Ethan Zhang seguramente seguiria peleando con las opciones de conexion...pero en fin...no siendo un fanatico de Linux...pense que seria una buena idea detallar todos los pasos y problemas que tuve que superar para hacer que esto finalmente funcione...

Por supuesto...no tenia PHP instalado en mi Linux...asi que el primer paso era instalarlo...sin embargo, no queria pasar demasiado tiempo instalando todo por separado, asi que decidi utilizar LAMP.

LAMP Installation
$ sudo apt-get install tasksel
$ sudo tasksel install lamp-server


Luego de estas dos simples lineas...PHP estaba listo y funcionando...asi que el siguiente paso era instalar Cliente de SAP HANA. Version Linux de 32bits.

Ahora, neesitaba algo para conectarme con mi Servidor SAP HANA Server...asi unixODBC era la mejor opcion.

unixODBC Installation
$ sudo apt-get install unixODBC unixODBC-dev

Con esto, era hora de configurar la conexion ODBC...

odbc.ini configuration
$ sudo vi odbc.ini
 
[HDB]
driver = /usr/sap/hdbclient32/libodbcHDB32.so
ServerNode = hana_server:30115

Era hora de hacer la primera prueba...asi que hice lo siguiente...

ODBC Testing
$ isql -v HDB SYSTEM manager

Luego de esto...tuve un error diciendo que libodbcHDB32.so no podia ser encontrado porque el archivo o directorio no existian...era muy raro...decidi darle una revisada a las dependencias...

Checking Dependencies
$ ldd /usr/sap/hdbclient32/libodbcHDB32.so

Esto me trajo al hecho de que libaio.so no se encontraba en mi sistema...asi que usando el Ubuntu Software System...simplemente lo instale...


Mi proximo test del isql fue exitoso, asi que...siendo un poco flojo...simplemente copie el codigo de mi blog anterior y lo ejecute -;)


PHP_HANA.php
<?php
$conn = odbc_connect("HDB","SYSTEM","manager",SQL_CUR_USE_ODBC);
if (!($conn))
{
          echo "<p>Connection to DB via ODBC failed: ";
        echo odbc_errormsg ($conn);
        echo "</p>\n";
}
else{
          if(isset($_POST["CARRID"]) == false){
                  $sql = "SELECT CARRID, CARRNAME FROM SFLIGHT.SCARR WHERE MANDT = 300";
               $rs = odbc_exec($conn,$sql);
               print("<DIV ALIGN='CENTER'>");
               print("<H1>SAP HANA from PHP</H1>");
               print("<FORM NAME='Get_Data' ACTION='$_SERVER[PHP_SELF]' METHOD='POST'>");
               print("<SELECT NAME='CARRID'>");
               while($row = odbc_fetch_array($rs)){
                     $carrid = $row["CARRID"];
                     $carrname = $row["CARRNAME"];
                     print("<OPTION VALUE='$carrid'>$carrname");
               }
        print("</SELECT>");
        print("<INPUT TYPE='SUBMIT' VALUE='Get Data'>");
        print("</FORM>");
        print("</DIV>");
        }
        else{
                  $carrid_param = $_POST["CARRID"];
                $sql = "SELECT * FROM \"_SYS_BIC\".\"blag/AV_FLIGHTS\"
                        WHERE CARRID = '$carrid_param'";
                $rs = odbc_exec($conn,$sql);
                print("<DIV ALIGN='CENTER'><TABLE BORDER=1>");
                print("<TR><TH>MANDT</TH><TH>CARRID</TH><TH>CONNID</TH>
                       <TH>COUNTRYFR</TH><TH>CITYFROM</TH>
                       <TH>AIRPFROM</TH><TH>COUNTRYTO</TH>
                       <TH>CARRNAME</TH><TH>DISTANCE</TH></TR>");
                while($row = odbc_fetch_array($rs)){
                          $mandt = $row["MANDT"];
                $carrid = $row["CARRID"];
                $connid = $row["CONNID"];
                $countryfr = $row["COUNTRYFR"];
                $cityfrom = $row["CITYFROM"];
                $airpfrom = $row["AIRPFROM"];
                $countryto = $row["COUNTRYTO"];
                $carrname = $row["CARRNAME"];
                $distance = $row["DISTANCE"];
                print("<TR><TD>$mandt</TD><TD>$carrid</TD>
                         <TD>$connid</TD><TD>$countryfr</TD>
                         <TD>$cityfrom</TD><TD>$airpfrom</TD>
                         <TD>$countryto</TD><TD>$carrname</TD>
                         <TD>$distance</TD></TR>");
               }
               print("</TABLE>");
               print("<A HREF='PHP_HANA.php'>Go Back</A></DIV>");
          }
}
?>



Como pueden ver...no fue muy dificil...aun para un fanatico de Windows -:D

Saludos,

Blag.

2 comments:

Anonymous said...

"Fatal error: Call to undefined function odbc_connect()..."

Me da ese error al ejecutarlo... :(

alguna idea?

Alvaro "Blag" Tejada Galindo said...

Si has instalado el unixODBC no deberias tener problemas...

$ sudo apt-get install unixODBC unixODBC-dev

Has revisado tu PHP.ini?

extension=php_pdo.dll
extension=php_pdo_odbc.dll

Saludos,

Blag.
Development Culture.