繁体   English   中英

在Mac OSX上启用PHP pdo_odbc扩展

[英]Enabling PHP pdo_odbc extension on a Mac OSX

我正在尝试在运行PHP 5.3的Mac上启用PHP的pdo_odbc扩展,这是我为使其正常工作所做的事情:

  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 

    根据一些博客,我用{NULL,NUll, NULL}替换了ZEND_MOD_END并再次运行make。 这次符合了。

  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上运行的经验。 我真的很想让这个扩展工作。 建议?

也许值得注意的是,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更新会破坏您的配置。

  • VirtualBox(20GB VDI)
  • Ubuntu Linux服务器(具有仅主机适配器)
  • LAMP(Apache,MySQL和PHP)
  • Samba(管理我的网络项目)

非常适合开发,您无需担心依赖项会被正确移植!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM