安装与配置

获取文件

从神通数据库安装后的目录中获取 ACI 动态库和 PDO_ACI 扩展库文件,在神通数据库安装程序 $SZ_OSCAR_HOME 目录下

  • ACI 动态库的路径为:$SZ_OSCAR_HOME/drivers/aci/{平台}
  • PDO_ACI 扩展库的路径为:$SZ_OSCAR_HOME/drivers/pdo_aci/{PHP版本}

开始安装

在 Linux 安装

安装PDO_ACI库

安装方法1:将PDO_ACI库放置在PHP默认扩展目录中,以便PHP运行时能够加载。

通过 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
安装方法2:在php.ini文件中指定的PDO_ACI库绝对路径

在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为数据库的安装路径。

安装方法3:修改extension_dir路径引用指定目录下的PDO_ACI库

在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库

安装方法1:将PDO_ACI库放置在PHP默认扩展目录中,以便PHP运行时能够加载。

将 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
安装方法2:在php.ini文件中指定的PDO_ACI库绝对路径

在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为数据库的安装路径。

安装方法3:修改extension_dir路径引用指定目录下的PDO_ACI库

在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 根目录中。

加载 ACI 动态库最简单的方式是将 aci.dll 直接拷贝到 PHP根目录中

警告

验证 Windows 动态库加载需要下载第三方软件 depends 或者 Dependencies, 也可以通过接下来的步骤验证。 例如,如果 ACI 动态库加载失败,php -m 将会显示 ‘找不到aci动态库’ 的错误信息。

下图是第三方软件 Dependencies 加载 pdo_aci.dll 验证 ACI 动态库,显示 ACI.dll 已加载成功。

../../../../_images/image06.png

下图显示 ACI.dll 加载失败。

../../../../_images/image07.png

验证 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,无法加载成功!