tod*_*ist 8 php macos odbc pdo
我正在尝试在运行PHP 5.3的Mac上启用PHP的pdo_odbc扩展.以下是我尝试使其工作的方法:
我用brew安装了UnixODBC
$ brew install unixodbc
Run Code Online (Sandbox Code Playgroud)下载PHP 5.3.8的源代码.在终端我导航到pdo_odbc文件夹.然后做了以下.
$ phpize
$ ./configure --with-pdo-odbc=unixODBC
$ make
Run Code Online (Sandbox Code Playgroud)
有一个错误.
/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
Run Code Online (Sandbox Code Playgroud)
根据我替换的一些博客ZEND_MOD_END,{NULL,NUll, NULL}再次运行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
Run Code Online (Sandbox Code Playgroud)
当我尝试执行此代码时抛出了这个:
<?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));
?>
Run Code Online (Sandbox Code Playgroud)
此行导致异常.
$stmt->execute(array(2));
Run Code Online (Sandbox Code Playgroud)
有没有人有任何经验让pdo_odbc在Mac上工作.我真的想让这个扩展工作.建议?
您是否检查过您的 php.ini(或同等文件)以查看您的“memory_limit”设置是否足够高?
错误 12 似乎与内存耗尽有关,但我不确定它是否与您正在运行的测试中的失控循环有关,或者只是与太多非常大的分配有关。检查phpinfo()转储对当前“memory_limit”设置的说明,然后向上查看是否可以纠正错误。
另请参阅:http ://www.php.net/manual/en/ini.core.php#ini.memory-limit