[英]Enabling PHP pdo_odbc extension on a Mac OSX
我正在尝试在运行PHP 5.3的Mac上启用PHP的pdo_odbc扩展,这是我为使其正常工作所做的事情:
我用brew安装了UnixODBC
$ brew install unixodbc
下载了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
根据一些博客,我用{NULL,NUll, NULL}
替换了ZEND_MOD_END
并再次运行make。 这次符合了。
然后我运行“ 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上运行的经验。 我真的很想让这个扩展工作。 建议?
也许值得注意的是,Apple为Mac OS X选择了iODBC(通过UnixODBC)并将其与Jaguar(10.2)捆绑在一起。 您应该从iodbc.org网站获得最新更新 ,因为Apple从未跟上官方项目补丁的发布。 我建议同时安装Framework和诸如此类,并将单独的补丁程序应用于Apple捆绑的标头和dylib。
过去与UnixODBC相关的malloc问题已通过转移到iODBC得以解决。 我不知道您会遇到这种情况,但是尝试进行投资似乎很小。
(ObDisclaimer:我为OpenLink Software工作;我们维护并支持iODBC项目。从您个人使用此选项中,我个人不会获得任何好处。)
您是否检查过php.ini(或等效文件)以查看您的“ memory_limit”设置是否足够高?
错误12似乎与内存耗尽有关,但我不确定它是否与正在运行的测试中的失控循环有关,或者与太多非常大的分配有关。 检查有关当前“ memory_limit”设置的phpinfo()转储说了些什么,然后将其向上查看是否可以更正错误。
另请参阅: http : //www.php.net/manual/zh/ini.core.php#ini.memory-limit
我个人更喜欢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.
我在MacBook上使用VirtualBox和Ubuntu Server Distro。
由于我已经注意到一次OSX更新会破坏您的配置。
非常适合开发,您无需担心依赖项会被正确移植!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.