2012-03-31 66 views
8

我試圖讓PDO_ODBC延長我的Mac這是運行PHP 5.3以下啓用PHP是我做的,試圖得到它的工作:啓用PHP PDO_ODBC擴展的Mac OSX

  1. 我在brew中安裝了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

不知道是否有一個brew等價物,但我只是運行「sudo port install php5-odbc」,它很容易安裝。 – Kevin 2012-04-09 22:58:40

+0

看起來像PDO_ODBC擴展中存在一個錯誤:https://bugs.php.net/bug.php?id=52942 我的猜測是一個不好的'malloc()'調用來分配已分配的內存。 – 2012-04-13 13:34:04

+0

Kevin,我很確定php5-odbc只是舊的非PDO ODBC擴展。我正在嘗試在Mac上獲得PDO-ODBC擴展。 – toddgeist 2012-04-15 15:33:35

回答

0

你檢查了你的php.ini(或等價物),看看你的'memory_limit'設置是否足夠高?

錯誤12似乎與內存耗盡有關,但我不確定它是否與正在運行的測試中的失控循環相關,或者只是太多非常大的分配。請查看轉儲說的關於您當前的'memory_limit'設置的一個phpinfo(),然後查看是否可以糾正錯誤。

參見:

2

也許值得注意的是,蘋果選擇的iODBC(超過了unixODBC)的Mac OS X和與捷豹(10.2)開始捆綁它。你應該得到latest update from the iodbc.org site,因爲蘋果從來沒有跟上官方的項目補丁。我建議安裝Frameworks等,並將獨立的補丁應用於Apple捆綁的頭文件和dylib。

過去與UnixODBC相關的malloc問題已通過轉移到iODBC解決。我不知道你會遇到這種情況,但這似乎是一個小小的嘗試。 (ObDisclaimer:我爲OpenLink Software工作;我們維持和支持iODBC項目,我個人從你的追求中獲益匪淺。)

-2

我在我的MacBook上使用了VirtualBox和Ubuntu Server Distro。

因爲我發現一個OSX更新可能會破壞您的配置。

  • 的VirtualBox(20GB VDI)
  • Ubuntu Linux操作系統 - 服務器(具有唯一的主機適配器)
  • LAMP(Apache,MySQL和& PHP)
  • 桑巴(來管理我的網絡項目)

對於開發非常有用,您無需擔心被正確移植的依賴關係!

0

我個人比較喜歡MacPorts,儘管我認爲大多數人喜歡Fink。爲OSX獲得更多功能完整版標準unix軟件包的最簡單方法是使用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.