在Mac OSX上启用PHP pdo_odbc扩展
我正在尝试在运行PHP5.3的Mac上启用用于PHP的pdo_odbc扩展。以下是我为使其正常工作所做的工作:在Mac OSX上启用PHP pdo_odbc扩展,php,macos,pdo,odbc,Php,Macos,Pdo,Odbc,我正在尝试在运行PHP5.3的Mac上启用用于PHP的pdo_odbc扩展。以下是我为使其正常工作所做的工作: 我用brew安装了UnixODBC $ brew install unixodbc 下载了PHP5.3.8的源代码。在终端中,我导航到pdo_odbc文件夹。然后做了下面的事情 $ phpize $ ./configure --with-pdo-odbc=unixODBC $ make 有一个错误 /Users/todd/Downloads/php-5.3.8/ext/pdo_o
$ brew install unixodbc
$ 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
基于一些博客,我用{NULL,NULL,NULL}
替换了ZEND_MOD_END
,并再次运行make。这次它照办了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));
?>
有没有人有过让pdo_odbc在Mac上工作的经验。我真的很想让这个分机工作。建议 您是否检查了php.ini(或等效文件)以查看“内存限制”设置是否足够高 错误12似乎与内存耗尽有关,但我不确定它是否与正在运行的测试中的失控循环有关,或者只是与太多非常大的分配有关。检查phpinfo()dump对当前“内存限制”设置的说明,然后对其进行设置,查看是否可以纠正错误
另请参见:也许值得注意的是,苹果选择了iODBC(而不是UnixODBC)作为Mac OS X,并将其与捷豹(10.2)捆绑在一起。你应该得到的,因为苹果从来没有跟上正式的项目补丁。我建议安装框架等,并将单独的补丁应用于Apple捆绑的头文件和dylibs 过去与UnixODBC相关的malloc问题已通过转移到iODBC解决。我不知道你的情况会是这样,但这似乎是一个小小的投资尝试
(免责声明:我为之工作;我们维护并支持iODBC项目。我个人从你的选择中一无所获。)我在MacBook上使用带有Ubuntu服务器发行版的VirtualBox 因为我注意到一次OSX更新会破坏您的配置
- VirtualBox(20GB虚拟数据接口)
- Ubuntu Linux服务器(带有仅限主机的适配器)
- LAMP(Apache、MySQL和PHP)
- Samba(用于管理我的web项目)
非常适合开发,您无需担心依赖项是否被正确移植 我个人更喜欢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.
不确定是否有brew等效程序,但我只是运行了“sudo port install php5 odbc”,安装起来很容易。PDO_odbc扩展中似乎有一个错误:我猜是一个错误的
malloc()
调用来分配已经分配的内存。Kevin,我很确定php5 odbc只是旧的非PDO odbc扩展。我正试图让PDO-ODBC扩展在mac上运行。
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.