Integrar Oracle en XAMPP en MAC Os x

Share on facebook
Share on twitter
Share on linkedin

Os hago un resumen de lo que vamos a ver en esta entrada:

  1. Instalar oracle en un servidor
  2. Configurar XAMPP en una maquina local que sea capaz de comunicarse con la BD de Oracle que hemos instalado en nuestro servidor
  3. Conectar desde PHP con la BD
  4. Conectar desde Doctrine (ORM) con la BD

1. Instalar oracle en un servidor


Vamos a partir de la base de que eres un desarrollador que trabaja con XAMPP (apache, mysql, php) . Bien aquí Oracle va a sustituir a Mysql. ¿Quieres información de todos los  motores y sus ventajas? https://www.oracle.com/index.html

Yo os hago un resumen de lo que más nos importó a nosotros:

Para desarrolladores es gratis, para producción tienes que pagar una licencia ya sea para la estandar edition o profesional edition. Nosotros vamos a montar en este ejemplo la express edition. 

¿qué necesitamos?

  1. Configurar el motor en nuestro servidor
  2. Utilizar un cliente para la gestión de base de datos (como sería PHPmyAdmin)
  3. Conectores para nuestro lenguaje de programación

Empezamos:

Configurar el motor en nuestro servidor:

Aquí lo mejor es usar Docker , si no sabes lo que es docker entra aquí: https://www.docker.com/ 

En resumen Docker es una imagen que está configurada para ejecutar una aplicación en concreto. Es como instalar un miniservidor configurado con todas las librerías externas necesarias para que funcione la aplicación principal que quieres ejecutar , lo tiene todo , su propia versión de sistema operativo, la memoria que necesita reservada… dentro de tu servidor, lo guay de docker es que usa los recursos del servidor matriz.

Para instalar escogemos la imagen de docker que mejor nos venga, en mi caso fue: https://hub.docker.com/r/sath89/oracle-12c/

Sigue los pasos y deja instalado en el servidor la BD, para probar desde cualquier máquina descarga el cliente SQL Developer https://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

Mete los datos de conexión y listo.  Una vez instalado vamos a continuar trabajando en nuestra máquina local.

2. Configurar XAMPP

Lo primero es activar la extensión OCI8 en PHP. Esta extensión ya está en XAMPP así como instantclient (las librerias para conectar con oracle) por lo  que no es necesario hacer nada con instantclient de oracle (a no ser que queramos actualizarlo) ni tampoco es necesario crear el plugin oci8.

Podéis ver las librerías de instantclient en : /Applications/XAMPP/xamppfiles/lib/instantclient-11.2.0.3.0

Podéis ver el módulo oci8 en : /Applications/XAMPP/xamppfiles/lib/php/extensions/oci8.so

  1. Vamos a comprobar que php.ini tiene activado el módulo oci8, para ello entramos en php.ini (/Applications/XAMPP/xamppfiles/etc/php.ini) nos aseguramos que existe la linea (y si no la creamos) extension=/Applications/XAMPP/xamppfiles/lib/php/extensions/oci8.so
  2. Vamos  a entrar en phpinfo y vamos a asegurarnos de que en apache la constante DYLD_LIBRARY_PATH apunta a instantclient, si no es el caso podéis copiar el contenido de instantclient en la ruta que marca la constante. Para modificar la ruta de DLYD_LIBRARY_PATH hay que modificar el fichero /Applications/XAMPP/xamppfiles/apache2/ctl.sh
  3. Reiniciamos servidor

3.Conectar desde PHP con la BD

Para ello podemos crear un fichero php y hacer la prueba

define (‘DB_USER’,’USUARIO DE LA BD’);
define (‘DB_PASS’,’PASSWORD DE LA BD’);
define (‘DB_HOST’, ‘DOMINIO:PUERTO/VERSION (XE POR EJEMPLO)’);
define (‘DB_NAME’, ‘NOMBRE DE LA BD’);
define (‘CONST_DB_CHARSET_FOR_CONNECT’,’WE8ISO8859P15′);
define (‘DB_CONNECTION_STRING’,’HOST’);//in localhost use ”


if ($conn = oci_connect(DB_USER, DB_PASS,DB_CONNECTION_STRING,CONST_DB_CHARSET_FOR_CONNECT))
{
    echo "Connected to foo";
    oci_close($conn);
}
else
{
    die("could not connect to foo");
}

Si todo ha ido bien conectará , si no lanzará algún mensaje de erro (mira el log de php a ver que no funciona en ese caso)

4. Conectar con ORM (ejemplo Doctrine)

El ORM debe tener un adaptador de oracle, ese adaptador tendrá una clase para realizar la coenxión, una vez conectado ya utiliza las herramientas del framework para operar con la BD.

Como ejemplo os mostramos la conexión de Oracle con Doctrine (tendremos en cuenta las ocnstantes creadas en el punto 3)

$conn = Doctrine_Manager::connection(array(‘oracle:dbname=’.DBHOST,DBUSER, DBPASSWORD),DBDATABASE);

Por mi parte nada más. Para cualquier duda podéis responder y estaré encantado de ayudar. 

Agustín Embuena. CEO Kometasoft