Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mac OSX上启用PHP pdo_odbc扩展_Php_Macos_Pdo_Odbc - Fatal编程技术网

在Mac OSX上启用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

我正在尝试在运行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_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安装” 这样就把扩展安装在了正确的位置。我修改了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));
    
    ?>
    

    有没有人有过让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.