暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux+Apache 2.4+PHP 5.4+达梦数据库

原创 LeeWen2020 2021-08-02
2217

环境说明

操作系统:Centos 7

Apache:2.4.6

PHP:5.4.16

达梦数据库:DM V8 1-2-38

php7版本连接达梦数据库参考:
PHP | 达梦技术社区文档 (eco.dameng.com)
达梦E学公众号:php7.4连接DM数据库环境搭建

环境安装

Apache和PHP可以采用源码安装,也可以使用yum直接安装。这里使用yum直接安装。

防火墙和SELINUX,可以提前放开相应策略或者关闭。

配置本地yum源

备份移除所有自带的repo文件,创建本地yum仓库文件

/etc/yum.repos.d/cdrom.repo

[Centos7.8]
name= Centos 7.8
baseurl=file:///cdrom
enabled=1
gpgcheck=0

安装Apache环境

yum install -y httpd

[root@localhost ~]# yum install -y httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Centos7.8                                                                         | 3.6 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-93.el7.centos for package: httpd-2.4.6-93.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-93.el7.centos.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-5.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-93.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================================
 Package                 Arch               Version                          Repository             Size
=========================================================================================================
Installing:
 httpd                   x86_64             2.4.6-93.el7.centos              Centos7.8             2.7 M
Installing for dependencies:
 apr                     x86_64             1.4.8-5.el7                      Centos7.8             103 k
 apr-util                x86_64             1.5.2-6.el7                      Centos7.8              92 k
 httpd-tools             x86_64             2.4.6-93.el7.centos              Centos7.8              92 k
 mailcap                 noarch             2.1.41-2.el7                     Centos7.8              31 k

Transaction Summary
=========================================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 3.0 M
Installed size: 10 M
Downloading packages:
---------------------------------------------------------------------------------------------------------
Total                                                                     10 MB/s | 3.0 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : apr-1.4.8-5.el7.x86_64                                                                1/5 
  Installing : apr-util-1.5.2-6.el7.x86_64                                                           2/5 
  Installing : httpd-tools-2.4.6-93.el7.centos.x86_64                                                3/5 
  Installing : mailcap-2.1.41-2.el7.noarch                                                           4/5 
  Installing : httpd-2.4.6-93.el7.centos.x86_64                                                      5/5 
  Verifying  : apr-1.4.8-5.el7.x86_64                                                                1/5 
  Verifying  : httpd-tools-2.4.6-93.el7.centos.x86_64                                                2/5 
  Verifying  : mailcap-2.1.41-2.el7.noarch                                                           3/5 
  Verifying  : httpd-2.4.6-93.el7.centos.x86_64                                                      4/5 
  Verifying  : apr-util-1.5.2-6.el7.x86_64                                                           5/5 

Installed:
  httpd.x86_64 0:2.4.6-93.el7.centos                                                                     

Dependency Installed:
  apr.x86_64 0:1.4.8-5.el7       apr-util.x86_64 0:1.5.2-6.el7  httpd-tools.x86_64 0:2.4.6-93.el7.centos 
  mailcap.noarch 0:2.1.41-2.el7 

Complete!
[root@localhost ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Apr  2 2020 13:13:23
[root@localhost ~]# systemctl start httpd

安装PHP

Centos 7 中自带的PHP版本为5.4(Centos 8中自带的PHP版本为7.2)

安装php和php-pdo

php -v

php -m

[root@localhost yum.repos.d]# yum install -y php php-pdo
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:5.4.16-48.el7 will be installed
--> Processing Dependency: php-common(x86-64) = 5.4.16-48.el7 for package: php-5.4.16-48.el7.x86_64
--> Processing Dependency: php-cli(x86-64) = 5.4.16-48.el7 for package: php-5.4.16-48.el7.x86_64
---> Package php-pdo.x86_64 0:5.4.16-48.el7 will be installed
--> Running transaction check
---> Package php-cli.x86_64 0:5.4.16-48.el7 will be installed
---> Package php-common.x86_64 0:5.4.16-48.el7 will be installed
--> Processing Dependency: libzip.so.2()(64bit) for package: php-common-5.4.16-48.el7.x86_64
--> Running transaction check
---> Package libzip.x86_64 0:0.10.1-8.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================
 Package               Arch              Version                   Repository            Size
==============================================================================================
Installing:
 php                   x86_64            5.4.16-48.el7             Centos7.8            1.4 M
 php-pdo               x86_64            5.4.16-48.el7             Centos7.8             99 k
Installing for dependencies:
 libzip                x86_64            0.10.1-8.el7              Centos7.8             48 k
 php-cli               x86_64            5.4.16-48.el7             Centos7.8            2.7 M
 php-common            x86_64            5.4.16-48.el7             Centos7.8            565 k

Transaction Summary
==============================================================================================
Install  2 Packages (+3 Dependent packages)

Total download size: 4.8 M
Installed size: 17 M
Downloading packages:
----------------------------------------------------------------------------------------------
Total                                                          55 MB/s | 4.8 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : libzip-0.10.1-8.el7.x86_64                                                 1/5 
  Installing : php-common-5.4.16-48.el7.x86_64                                            2/5 
  Installing : php-cli-5.4.16-48.el7.x86_64                                               3/5 
  Installing : php-5.4.16-48.el7.x86_64                                                   4/5 
  Installing : php-pdo-5.4.16-48.el7.x86_64                                               5/5 
  Verifying  : php-5.4.16-48.el7.x86_64                                                   1/5 
  Verifying  : php-pdo-5.4.16-48.el7.x86_64                                               2/5 
  Verifying  : libzip-0.10.1-8.el7.x86_64                                                 3/5 
  Verifying  : php-cli-5.4.16-48.el7.x86_64                                               4/5 
  Verifying  : php-common-5.4.16-48.el7.x86_64                                            5/5 

Installed:
  php.x86_64 0:5.4.16-48.el7                  php-pdo.x86_64 0:5.4.16-48.el7                 

Dependency Installed:
  libzip.x86_64 0:0.10.1-8.el7                    php-cli.x86_64 0:5.4.16-48.el7              
  php-common.x86_64 0:5.4.16-48.el7              

Complete!
[root@localhost ~]# php -v
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

[root@localhost lib64]# php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
dm
ereg
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
json
libxml
mhash
openssl
pcntl
pcre
PDO
pdo_sqlite
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
tokenizer
xml
zip
zlib

[Zend Modules]

Apache和PHP安装完成后,需要检查Apache配置文件是否已加载php库文件,默认是已自动配置加载。

测试PHP环境

创建php测试页面:

[root@localhost ~]# echo "<?php phpinfo();?>" >/var/www/html/index.php

测试:IP/index.php

image-20210802172109137

安装达梦数据库软件

参考:达梦技术社区:Linux 达梦数据库安装

只需要安装软件,或者将已安装达梦数据库软件的bin目录拷贝到服务器上。

使用达梦php驱动时需要应用相关依赖库。

配置PHP加载达梦驱动

(1)首先拷贝达梦数据库PHP接口驱动文件到php服务器上,达梦数据库PHP驱动存放在数据库安装目录下drivers/php_pdo目录下

image-20210802113613523

需要注意,如果PHP版本是TS版,需要选择对应的TS版本的达梦数据库dm php和dm pdo驱动库文件。拷贝对应驱动文件到php默认的扩展模块路径下。

使用yum安装的自带的PHP,默认扩展模块的路径为/usr/lib64/php/modules,可以将对应版本的驱动文件拷贝到/usr/lib64/php/modules下。也可以在php.ini中指定扩展模块的路径。

默认扩展模块路径查看: php -i|grep -i extension_dir

(2)修改PHP配置文件php.ini,添加达梦数据库模块库文件

方式1:

php.ini文件中添加:

extension=libphp54_dm.so

/etc/php.d/pdo.ini文件中添加:

extension=php54_pdo_dm.so
##不要添加在最上面

方式2:

在/etc/php.d目录下,创建两个达梦驱动配置文件dm8.ini和pdo_dm8.ini,分别配置达梦php驱动扩展和pdo驱动扩展。

[root@localhost php.d]# pwd
/etc/php.d
[root@localhost php.d]# cat dm8.ini 
extension=libphp54_dm.so

[root@localhost php.d]# cat pdo_dm8.ini 
extension=php54_pdo_dm.so

(3)配置LD_LIBRARY_PATH环境变量

##临时生效:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/dmdbms/bin
##永久生效,添加到/etc/profile配置文件中

(4)检查dm扩展模块

方法1:通过php -m命令查看

image-20210802142432498

方法2:重启httpd服务,然后通过前面的index.php测试页面查看

image-20210802172151751

image-20210802172227636

测试连接达梦数据库

新建一个测试php页面:

[root@localhost html]# pwd
/var/www/html
[root@localhost html]# cat test.php 
<?php
try {
$link = dm_connect("192.168.15.35", "SYSDBA", "SYSDBA") or die("Could not connect : " . dm_error());
print "Connected successfully!数据库版本为\n";
$query = "select *,id_code from v\$version where rownum=1;";
$result = dm_query($query) or die("Query failed : " . dm_error());
while ($line = dm_fetch_array($result, DM_ASSOC)) {
foreach ($line as $col_value) {
print_r ($col_value);
}
}
dm_free_result($result);
dm_close($link);
}
catch(PDOException $e){
   print( "Error: " . $e->getMessage())."\n";
}
?>

通过访问IP/test.php,测试是否连接数据库成功

image-20210802175538278

问题处理

报错1 PHP Startup: Unable to load dynamic library

pdo模块加载失败

[root@localhost ~]# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php54_pdo_dm.so' - /usr/lib64/php/modules/php54_pdo_dm.so: undefined symbol: php_pdo_register_driver in Unknown on line 0
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17) 

处理办法:

方法1:在php 5.4版本中,pdo扩展配置文件在/etc/php.d/pdo.ini,将dm php pdo驱动添加到pdo.ini文件中

[root@localhost php.d]# cat pdo.ini
; Enable pdo extension module
extension=pdo.so
extension=php54_pdo_dm.so

##注意extension=pdo.so要放到最上面

方法2:在/etc/php.d目录下,创建两个达梦驱动配置文件dm8.ini和pdo_dm8.ini,分别配置达梦php驱动扩展和pdo驱动扩展。

[root@localhost php.d]# cat pdo_dm8.ini 
extension=php54_pdo_dm.so

报错2 PHP Fatal error:Unable to start dm module

[root@localhost php.d]# php -m
PHP Fatal error:  Unable to start PDO_DM module in Unknown on line 0
或者
[root@localhost lib64]# php -m
PHP Fatal error:  Unable to start dm module in Unknown on line 0

处理办法:

方法1:LD_LIBRARY_PATH环境变量,指定为达梦数据库软件安装目录下的bin目录

##临时生效:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/dmdbms/bin
##永久生效,添加到/etc/profile配置文件中

方法2:见报错3的处理办法。

报错3 PHP正常,httpd服务启动报错

某些环境下(php 5.*)php -m可以看到已正常加载dm和PDO_DM扩展模块,但是重启httpd服务时报错,httpd的error_log中报错信息如下:

[root@localhost bin]# systemctl start httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

###httpd error_log报错信息:
PHP Fatal error:  Unable to start dm module in Unknown on line 0

这个很奇怪,因为单独使用php查看相关扩展模块的情况都是成功的,而且使用php测试连接数据库也是正常的,但是启动httpd服务就会报错。

初步判断可能是httpd服务启动时用户环境变量加载动态链接库出现问题。

处理办法:

(1)在/etc/ld.so.conf.d目录下创建dm8.conf配置文件:

[root@localhost ld.so.conf.d]# cat dm8.conf 
/opt/dmdbms/bin

(2)root执行ldconfig命令生效

[root@localhost ld.so.conf.d]# ldconfig 
ldconfig: /opt/dmdbms/bin/libxerces-c-3.1.so is not a symbolic link
##这个报错可以忽略

(3)然后启动httpd服务

[root@localhost ld.so.conf.d]# systemctl restart httpd
[root@localhost ld.so.conf.d]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1180/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1186/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1437/master         
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      3614/sshd: root@pts 
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      3916/sshd: root@pts 
tcp        0      0 127.0.0.1:6012          0.0.0.0:*               LISTEN      4809/sshd: root@pts 
tcp        0      0 127.0.0.1:6013          0.0.0.0:*               LISTEN      4954/sshd: root@pts 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      700/rpcbind         
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1433/dnsmasq        
tcp6       0      0 :::22                   :::*                    LISTEN      1180/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1186/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1437/master         
tcp6       0      0 ::1:6010                :::*                    LISTEN      3614/sshd: root@pts 
tcp6       0      0 ::1:6011                :::*                    LISTEN      3916/sshd: root@pts 
tcp6       0      0 ::1:6012                :::*                    LISTEN      4809/sshd: root@pts 
tcp6       0      0 ::1:6013                :::*                    LISTEN      4954/sshd: root@pts 
tcp6       0      0 :::111                  :::*                    LISTEN      700/rpcbind         
tcp6       0      0 :::80                   :::*                    LISTEN      53798/httpd    ---->已启动

报错4 页面访问报错 Create SOCKET connection failure

页面访问报错:

Error: SQLSTATE[HY000] dpi_login: -70028 Create SOCKET connection failure 
或者
Could not connect : Create SOCKET connection failure

处理办法:

1、通过index.php测试phpinfo可以正常访问,但是访问数据库报错

2、查看Apache的error_log

发现有如下输出:

[core:notice] [pid 2122] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0

初步判断可能是由于selinux开启导致。

(1)检查selinux状态

[root@localhost ~]# getenforce 
Enforcing

##Enforcing表示已开启应用SELINUX策略

(2)执行setenforce 0 设置为Permissive模式,永久生效需要修改/etc/selinux/config 文件并重启

[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce 
Permissive

##Permissive表示只记录违反策略的操作不会拒绝

(3)也可以设置为disabled完全禁用SELINUX

修改/etc/selinux/config ,将SELINUX设置为disabled,重启生效。

SELINUX=disabled

3、再访问地址,可以正常访问数据库

image-20210802175538278

报错5 php页面访问数据库报错:Could not connect : Encryption module failed to load

页面访问报错:Could not connect : Encryption module failed to load

image-20210804154710324

处理办法:

(1)确认Apache和PHP是否正常

防火墙和SELINUX均关闭。

通过访问phpinfo 测试界面确认,Apache和php均正常。

image-20210804155328550

(2)检查/usr/lib64下是否缺失libcrypto.so动态链接库

[root@localhost ~]# cd /usr/lib64/
[root@localhost lib64]# ls -l libcrypto.so
ls: cannot access libcrypto.so: No such file or directory

(3)如果缺失/usr/lib64下缺失libcrypto.so库文件,可以使用/opt/dmdbms/bin/下的libcrypto.so文件,手动在/usr/lib64下创建libcrypto.so软链接。或者直接将/opt/dmdbms/bin下的libcrypto.so文件拷贝到/usr/lib64下

[root@localhost lib64]# ln -s /opt/dmdbms/bin/libcrypto.so libcrypto.so
[root@localhost lib64]# ls -l libcrypto.so
lrwxrwxrwx. 1 root root 28 Aug  4 13:34 libcrypto.so -> /opt/dmdbms/bin/libcrypto.so

(4)重启httpd服务,访问正常

[root@localhost ]# systemctl restart httpd

image-20210802175538278

更多资讯请上达梦技术社区了解:https://eco.dameng.com

最后修改时间:2021-08-04 16:00:14
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论