2012-03-31 19 views
8

que estoy tratando de conseguir la extensión PDO_ODBC para PHP activado en mi Mac que se está ejecutando PHP 5.3 Esto es lo que hice para tratar de conseguir que funcione:Habilitación de extensión PHP PDO_ODBC en un Mac OS X

  1. he instalado UnixODBC con cerveza

    $ brew install unixodbc 
    
  2. ha cargado la fuente de PHP 5.3.8. En la terminal navegué a la carpeta pdo_odbc. Entonces hizo lo siguiente.

    $ phpize 
    $ ./configure --with-pdo-odbc=unixODBC 
    $ make 
    

    Se ha producido un error.

    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c:43: error: ‘ZEND_MOD_END’ undeclared here (not in a function) 
    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c: In function ‘zm_startup_pdo_odbc’: 
    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c:135: warning: cast to pointer from integer of different size 
    

    Sobre la base de algunos blogs que sustituyen ZEND_MOD_END con {NULL,NUll, NULL} y corrieron a hacer de nuevo. Esta vez cumplió.

  3. Luego ejecuté "sudo make install" y eso instaló la extensión en el lugar correcto. Modifiqué php.ini para habilitarlo. Y aparece en phpInfo()

Hasta ahora todo bien. Pero cuando comienzo a la ejecución de pruebas simples recibo errores sobre todos los demás intentan

php(20048,0x7fff796f1960) malloc: *** mmap(size=2977160837258543104) failed (error code=12) 
*** error: can't allocate region 
*** set a breakpoint in malloc_error_break to debug 
terminate called throwing an exceptionAbort trap: 6 

Este fue arrojado, cuando traté de ejecutar este código:

<?php 

    $dsn = 'odbc:Driver={FileMaker ODBC};Server=localhost;Database=CalDAV;'; 
    $pdo = new PDO($dsn, "odbc", "odbc"); 

    $sql = "SELECT * From Users Where id = 2"; 
    $r = $pdo->query($sql); 
    print_r($r->fetch(PDO::FETCH_ASSOC)); 

    $sql = "SELECT * From Users Where id = ?"; 
    $stmt = $pdo->prepare($sql); 
    $stmt->execute(array(2)); 
    print_r($stmt->fetch(PDO::FETCH_ASSOC)); 

?> 

esta línea hace que la excepción.

$stmt->execute(array(2)); 

¿Alguien tiene alguna experiencia para que pdo_odbc funcione en la Mac? Realmente me gustaría que esta extensión funcione. Sugerencias?

+0

no está seguro de si hay un equivalente cerveza pero me acaba de ejecutar "sudo port install php5-ODBC" y se instala fácilmente. – Kevin

+0

Parece que hay un error en la extensión PDO_ODBC: https://bugs.php.net/bug.php?id=52942 Supongo que es una mala llamada 'malloc()' para asignar memoria que ya ha sido asignada. –

+0

Kevin, estoy bastante seguro de que php5-odbc es solo una antigua extensión PDO ODO. Estoy tratando de que la extensión PDO-ODBC se ejecute en el mac. – toddgeist

Respuesta

0

¿Ha comprobado su php.ini (o equivalente) para ver si su configuración 'memory_limit' es lo suficientemente alta?

El error 12 parece estar relacionado con el agotamiento de la memoria, pero no estoy seguro si está relacionado con un bucle de ejecución en las pruebas que está ejecutando, o simplemente demasiadas asignaciones muy grandes. Compruebe lo que dice phpinfo() volcado sobre su configuración actual 'memory_limit' y luego hacia arriba para ver si eso corrige el error.

Consulte también:

2

Tal vez vale la pena destacar que Apple eligió iODBC (más UnixODBC) para Mac OS X y liado en a partir de Jaguar (10.2). Debería obtener el latest update from the iodbc.org site, porque Apple nunca se ha mantenido al día con los parches oficiales del proyecto. Recomiendo instalar ambos Frameworks y demás, y aplicar los parches por separado a los encabezados y dylibs de Apple.

Los problemas pasados ​​de malloc asociados con UnixODBC se han resuelto cambiando a iODBC. No sé si este será el caso para ti, pero parece una pequeña inversión intentarlo.

(ObDisclaimer: Trabajo para OpenLink Software; mantenemos y apoyamos el proyecto iODBC. Personalmente, no gano nada por su búsqueda de esta opción.)

-2

Estoy usando VirtualBox con una distribución Ubuntu Server en mi MacBook.

Desde que noté que una actualización de OSX puede arruinar su configuración.

  • VirtualBox (VDI 20GB)
  • Ubuntu Linux-Server (con un adaptador de host-only)
  • LAMP (Apache, MySQL & PHP)
  • Samba (para controlar sus proyectos web)

Funciona muy bien para el desarrollo y no tiene que preocuparse por las dependencias portadas correctamente.

0

Personalmente prefiero MacPorts, aunque creo que la mayoría de la gente prefiere Fink. La forma más sencilla de obtener más versiones completas de funciones de paquetes estándar de Unix para OSX es usar MacPorts o Fink.

Locate the php.ini file on your Mac (/etc/php.ini) 
Replace all instances of /var/mysql/mysql.sock to /tmp/mysql.sock 
Save the file and restart Apache.