安装与配置¶
获取文件¶
从神通数据库安装后的目录中获取 ACI 动态库和 PDO_ACI 扩展库文件,在神通数据库安装程序 $SZ_OSCAR_HOME 目录下
- ACI 动态库的路径为:$SZ_OSCAR_HOME/drivers/aci/{平台}
- PDO_ACI 扩展库的路径为:$SZ_OSCAR_HOME/drivers/pdo_aci/{PHP版本}
开始安装¶
在 Linux 安装¶
安装PDO_ACI库¶
通过 php -i 命令查看 extension_dir 配置选项获取扩展库路径,然后添加 PDO_ACI 扩展文件到该目录下。
root@deb10:~# php -i|grep -i extension_dir
extension_dir => /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902 => /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902
sqlite3.extension_dir => no value => no value
可以将 pdo_aci.so 拷贝到扩展目录
cp $SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci_nts.so /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/
或
cp $SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci.so /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/
也可以用软连接方式:
ln -s $SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci_nts.so /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so
或
ln -s $SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci.so /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci.so
在 php 配置文件 php.ini 中添加 PDO_ACI 扩展库
php --ini 可以查看 php.ini 所在的完整路径, 然后在 php.ini 配置文件中添加 PDO_ACI
root@deb10:~# php --ini
Configuration File (php.ini) Path: /usr/local/php7.4
Loaded Configuration File: /usr/local/php7.4/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
作为一个共享模块安装 PDO_ACI 时,需要更新 php.ini 文件以便当 PHP运行时 PDO_ACI 扩展能被自动加载, 还需要在先启用 PDO 驱动;
注意确保PDO_ACI 被列在 pdo.so 那一行之后,因为 PDO 必须在神通数据库扩展被载入前初始化。
extension=pdo.so
extension=pdo_aci.so
# 或者
extension=pdo_aci_nts.so
警告
注意: PDO_ACI 驱动必须在 PDO 之后加载.
选择使用 pdo_aci.so(线程安全) 还是 pdo_aci_nts.so(非线程安全), 请确定 PHP 为线程安全还是非线程安全版本。PDO_ACI 线程安全与PHP运行时线程安全版本保持一致。
root@deb10:~# php -i|grep -i thread
Thread Safety => disabled
在php.ini文件中,我们设置extension是,可以写绝对路径,比如:
extension=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci.so
或
extension=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci/pdo_aci_nts.so
$SZ_OSCAR_HOME为数据库的安装路径。
在php.ini文件中,我们设置extension_dir,指向PDO_ACI库所在路径,此时extension就可以不用带路径,比如:
extension=pdo_aci.so
extension_dir=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/
或
extension=pdo_aci_nts.so
extension_dir=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/
$SZ_OSCAR_HOME为数据库的安装路径。
配置 ACI 依赖库¶
PDO_ACI 依赖 ACI 动态库,所以需要确保 ACI 动态库被加载到当前的系统中。如果当前系统中已经安装了神通数据库,那么 ACI 动态库默认被加载。
通过执行 ldd pdo_aci.so 验证 ACI 动态库是否被加载,如下面所示,显示libaci.so为not found,此时PDO_ACI是无法正常工作的:
root@deb10:~# ldd pdo_aci.so
linux-vdso.so.1 (0x00007fff1c3d7000)
libaci.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9ef68f2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9ef6ccc000)
如上所示,libaci.so 没有被当前系统加载。
加载 ACI 动态库的方法主要有两种方法。
- 方法一,通过添加修改系统环境变量让 ACI 动态库能被发现。
- 方法二,将 ACI 动态库拷贝或者通过创建软链接的方式加入到系统默认动态库目录,系统默认的动态库目录有 /lib,/usr/lib,/usr/lib/local/lib 等。
方法一:添加动态库路径到系统环境变量 LD_LIBRARY_PATH 中
添加用户登录自动配置环境变量, /etc/profile 文件在任何用户登录都会加载。
vi /etc/profile
## 添加内容
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SZ_OSCAR_HOME/drivers/aci/{平台}/
使配置生效,可以执行 source /etc/profile 或者再次登录。
source /etc/profile
再次验证 libaci.so 加载成功。
root@deb10:~# ldd /mypath/pdo_aci.so
linux-vdso.so.1 (0x00007ffee65d8000)
libaci.so => /opt/ShenTong/aci/linux64/libaci.so (0x00007ffab15dd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffab140c000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ffab123f000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffab1239000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ffab121f000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffab1bc0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffab10d9000)
方法二: 在系统默认动态库目录创建 libaci.so 的软链接
ln -s $SZ_OSCAR_HOME/aci/linux64/libaci.so /lib/libaci.so
或者
ln -s $SZ_OSCAR_HOME/aci/linux64/libaci.so /usr/lib/libaci.so
直接拷贝文件
cp $SZ_OSCAR_HOME/aci/linux64/libaci.so /lib/libaci.so
# 或者
cp $SZ_OSCAR_HOME/aci/linux64/libaci.so /usr/lib/libaci.so
再次验证
root@deb10:~# ldd /lib64/pdo_aci.so
linux-vdso.so.1 (0x00007ffe105cd000)
libaci.so => /opt/ShenTong/aci/linux64/libaci.so (0x00007ffab15dd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fae06a1a000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fae0684d000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fae06847000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fae0682d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fae071ce000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fae066e7000)
上述所示,libaci.so 已经加载成功。
验证 PDO_ACI 是否成功安装¶
完成上述步骤, 就已经配置好 PDO_ACI, 接下来可以使用 php -m 查看 PDO_ACI
是否已成功被加载.
php -m | grep PDO
PDO
PDO_ACI
已经看到当前PHP环境已经成功加载 PDO_ACI 扩展.
在 Windows 安装¶
安装PDO_ACI库¶
将 PDO_ACI 扩展文件加入到 php 扩展目录下,以便PHP运行时能够加载。
通过 php -i 命令查看 extension_dir 配置选项获取扩展库路径,然后将 PDO_ACI 扩展文件拷贝到PHP默认扩展目录下。
php -i|find /i "extension_dir" 查找 extension_dir => 目录
E:\PDO_ACI>php -i|find /i "extension_dir"
extension_dir => C:\php\ext => C:\php\ext
接下来, 将 php_pdo_aci.dll(线程安全) 或者 php_pdo_aci_nts.dll(非线程安全) 拷贝到 extension_dir 所在的目录中。
警告
注意: PDO_ACI 依赖 ACI 动态库, 如果没有安装神通数据库, 需要下载 ACI 动态库, 加载 ACI 动态库最简单的方式是将 aci.dll 直接拷贝到 PHP 根目录中.
在 php 配置文件 php.ini 中添加 PDO_ACI 扩展库
php --ini 可以查看 php.ini 所在的完整路径
E:\PDO_ACI>php --ini
Configuration File (php.ini) Path:
Loaded Configuration File: C:\php\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
作为共享模块安装 PDO_ACI 时,需要更新php.ini文件, 以便当PHP运行时PDO_ACI 扩展可以被自动加载, 注意在 php.ini 中的 php_pdo.dll后面启用。例如:
extension=php_pdo.dll
extension=php_pdo_aci.dll
或者
extension=php_pdo_aci_nts.dll
警告
注意: PDO_ACI 驱动必须在 PDO 之后加载.
选择使用 php_pdo_aci.dll(线程安全) 还是 php_pdo_aci_nts.dll(非线程安全), 请确定 PHP 为线程安全还是非线程安全版本。PDO_ACI 线程安全与PHP运行时线程安全版本保持一致。
使用 php -i 命令查询 Thread Safety 配置项信息,确定PHP运行时线程安全版本。
E:\PDO_ACI>php -i|find /i "thread"
Thread Safety => enabled Thread API => Windows Threads
在php.ini文件中,我们设置extension是,可以写绝对路径,比如:
extension=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci.dll
或
extension=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/pdo_aci_nts.dll
$SZ_OSCAR_HOME为数据库的安装路径。
在php.ini文件中,我们设置extension_dir,指向PDO_ACI库所在路径,此时extension就可以不用带路径,比如:
extension=pdo_aci.dll
extension_dir=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/
或
extension=pdo_aci_nts.dll
extension_dir=$SZ_OSCAR_HOME/drivers/PDO_ACI/PHP7.3/
$SZ_OSCAR_HOME为数据库的安装路径。
配置 ACI 依赖库¶
PDO_ACI 依赖 ACI 动态库,所以需要确保 ACI 动态库被加载到当前的系统中。
如果当前系统中已经安装了神通数据库,那么 ACI 动态库默认被加载。
如果没有安装神通数据库, 需要下载 ACI 动态库, 加载 ACI 动态库最简单的方式是将 aci.dll 直接拷贝到 PHP根目录中.
Windows 加载动态库的方式有两种,
例如:当前 ACI 动态库目录在 c:\aci 下,转至 系统属性 -> 高级 -> 环境变量 -> 系统变量 选择 PATH 变量,添加 ACI 动态库的目录(c:\aci),保存生效。
加载 ACI 动态库最简单的方式是将 aci.dll 直接拷贝到 PHP根目录中
警告
验证 Windows 动态库加载需要下载第三方软件 depends 或者 Dependencies,
也可以通过接下来的步骤验证。
例如,如果 ACI 动态库加载失败,php -m 将会显示 ‘找不到aci动态库’ 的错误信息。
下图是第三方软件 Dependencies 加载 pdo_aci.dll 验证 ACI 动态库,显示 ACI.dll 已加载成功。
![]()
下图显示 ACI.dll 加载失败。
![]()
验证 PDO_ACI 是否成功安装¶
到这里, PDO_ACI 的配置已经完成了, 最后可以使用 php -m 查看 PDO_ACI
是否已经加载成功.
E:\PDO_ACI>php -m
[PHP Modules]
bcmath
calendar
Core
ctype
date
dom
filter
hash
iconv
json
libxml
mysqlnd
pcre
PDO
PDO_ACI
Phar
readline
Reflection
session
SimpleXML
SPL
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]
常见安装错误¶
ACI动态库加载失败¶
当遇到以下情况,考虑 ACI 动态库是否配置到系统中。
ldd pdo_aci.so 找不到 libaci.so
root@deb10:~# ldd /mypath/pdo_aci.so
linux-vdso.so.1 (0x00007ffc4b0c5000)
libaci.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6006649000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6006a23000)
或者 php -m 输出提示找不到 ACI 动态库,
警告信息: (libaci.so: cannot open shared object file: No such file or directory)
root@deb10:~# php -m
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (libaci.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
\
Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (libaci.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (libaci.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
\
Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (libaci.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PDO_ACI扩展库加载失败¶
以下情况是 PDO_ACI 扩展库文件没有成功引入到 PHP 扩展目录下,
警告信息: pdo_aci_nts.so: cannot open shared object file: No such file or directory 或者
pdo_aci.so: cannot open shared object file: No such file or directory。
root@deb10:~# php -m
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
\
Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
\
Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' (tried: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts: cannot open shared object file: No such file or directory), /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so (/usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/pdo_aci_nts.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
线程安全版本不匹配¶
PHP 运行时线程安全版本与 PDO_ACI 扩展库线程安全版本不一致
当遇到以下情况,可能是配置的 PDO_ACI 扩展库线程安全版本与PHP 运行时线程安全版本不一致。
root@deb10:~# php -m
PHP Warning: PHP Startup: PDO_ACI: Unable to initialize module
Module compiled with build ID=API20190902,TS
PHP compiled with build ID=API20190902,NTS
These options need to match
in Unknown on line 0
\
Warning: PHP Startup: PDO_ACI: Unable to initialize module
Module compiled with build ID=API20190902,TS
PHP compiled with build ID=API20190902,NTS
These options need to match
in Unknown on line 0
PHP Warning: PHP Startup: PDO_ACI: Unable to initialize module
Module compiled with module API=20180731
PHP compiled with module API=20190902
These options need to match
in Unknown on line 0
PDO_ACI扩展库的版本与PHP的版本不兼容¶
PDO_ACI的编译版本与PHP版本需要完全一致才能正确引入,否则会出现以下问题:
[root@localhost phpredis-develop]# php -m | grep redis
PHP Warning: PHP Startup: Unable to load dynamic library
PHP Warning: PHP Startup: redis: Unable to initialize module
Module compiled with module API=20131226
PHP compiled with module API=20100525
These options need to match
in Unknown on line 0
以上显示引入模块的API版本是20131226,而PHP的API版本是20100525,无法加载成功!