2012-03-31 2 views
8

Я пытаюсь получить расширение PDO_ODBC для PHP включен на моем Mac, который работает PHP 5.3 Вот что я сделал, чтобы попытаться заставить его работать:Включение расширения PHP PDO_ODBC на Mac OSX

  1. Я установил UnixODBC с варевом

    $ brew install unixodbc 
    
  2. Загруженного источником для PHP 5.3.8. В терминале я перешел в папку pdo_odbc. Затем сделал следующее.

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

    Произошла ошибка.

    /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 
    

    Основываясь на некоторых блогах я заменил ZEND_MOD_END с {NULL,NUll, NULL} и побежал делать снова. На этот раз он выполнил.

  3. Затем я запустил «sudo make install» и установил расширение в нужном месте. Я модифицировал php.ini, чтобы включить его. И это отображается в phpInfo()

Пока все хорошо. Но когда я начинаю запуска простых тестов, я получаю ошибки о любой другой попробовать

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 

Это был брошен, когда я пытался выполнить этот код:

<?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)); 

?> 

эта строка вызывает исключение.

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

Есть ли у кого-нибудь опыт получения pdo_odbc для работы на Mac. Я бы очень хотел, чтобы это расширение работало. Предложения?

+0

не уверен, есть ли эквивалент пива, но я просто запускал «sudo port install php5-odbc» и легко устанавливался. – Kevin

+0

Похоже, есть ошибка в расширении PDO_ODBC: https://bugs.php.net/bug.php?id=52942 Мое предположение - плохой вызов 'malloc()' для выделения выделенной памяти. –

+0

Кевин, я уверен, что php5-odbc - это просто старое расширение PDO ODBC. Я пытаюсь получить расширение PDO-ODBC, идущее на Mac. – toddgeist

ответ

0

Вы проверили свой php.ini (или эквивалент), чтобы проверить, достаточно ли ваша установка «memory_limit»?

Ошибка 12, как представляется, связана с исчерпанием памяти, но я не уверен, связано ли это с циклом выбега в тестах, которые вы выполняете, или просто слишком много очень больших распределений. Проверьте, что phpinfo() dump говорит о вашей текущей настройке «memory_limit», а затем вверх, чтобы увидеть, исправляет ли эта ошибка.

Смотрите также:

2

Возможно, стоит отметить, что компания Apple выбрала iODBC (над UnixODBC) для Mac OS X и в комплекте его, начиная с Jaguar (10.2). Вы должны получить latest update from the iodbc.org site, потому что Apple никогда не справлялась с официальными планами проекта. Я рекомендую установить как Framework, так и применять отдельные патчи к заголовкам и дилибам Apple.

Прошлые проблемы с malloc, связанные с UnixODBC, были разрешены путем перехода на iODBC. Я не знаю, что это будет иметь место для вас, но это кажется небольшой инвестицией.

(Obdisclaimer: Я работаю для OpenLink Software, мы поддерживаем и поддерживаем проект iODBC. Я лично ничего не получаю от вашего преследования этого варианта.)

-2

Я использую VirtualBox с сервером Ubuntu Distro на своем MacBook.

Поскольку я заметил, что одно обновление OSX может испортить вашу конфигурацию.

  • VirtualBox (20GB VDI)
  • Ubuntu Linux-сервер (с адаптером хост-только)
  • ЛАМПЫ (Apache, MySQL & PHP)
  • Samba (Для того, чтобы управлять своими веб-проектами)

Отлично подходит для разработки, и вам не нужно беспокоиться о правильности портирования зависимостей!

0

Я лично предпочитаю MacPorts, хотя я думаю, что большинство людей предпочитают Финка. Самый простой способ получить больше полнофункциональных версий стандартных пакетов unix для OSX - использовать либо MacPorts, либо 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.