Linux下LANMP集成环境中编译扩大pdo_odbc模块

linux版本为CentOs6.5,php集成环境为lanmp_v3.1,集成环境中默许的pdo扩展为:mysql,
sqlite,
sqlite2,现在有须求想链接微软的Access数据库,所以必要pdo_odbc模块的支撑。查询了过多素材,如下:

编译模块不求人,编译助手诞生接济curl,memcache,bcmath,pdo_mysql等,重若是参照这些,不过这几个也许是旧的lanmp版本的并不全适用,但可以参照其规律,其shell脚本如下:

sqlite 1sqlite 2

 1 #!/bin/bash
 2 # ext install scripts
 3 # Author:sendsky
 4 # Url http://www.baiup.com/
 5 
 6 echo "Select php version:
 7     1 php-5.2.17 (default)
 8     2 php-5.3.27
 9 "
10 sleep 0.1
11 read -p "Please Input 1,2: " PHP_VER_ID
12 if [[ $PHP_VER_ID == 2 ]]; then
13     PHP_VER="5.3.27"
14     ext_dir="no-debug-non-zts-20090626"
15 else
16     PHP_VER="5.2.17"
17     ext_dir="no-debug-zts-20060613"
18 fi
19 echo "Select php ext:
20 bcmath      gd         mysqlnd       posix       sybase_ct
21 bz2         gettext    oci8          pspell      sysvmsg
22 calendar    gmp        odbc          readline    sysvsem
23 com_dotnet  hash       openssl       recode      sysvshm
24 ctype       iconv      pcntl         reflection  tidy
25 curl        imap       pcre          session     tokenizer
26 date        interbase  pdo           shmop       wddx
27 dba         intl       pdo_dblib     simplexml   xml
28 dom         json       pdo_firebird  skeleton    xmlreader
29 enchant     ldap       pdo_mysql     snmp        xmlrpc
30 ereg        libxml     pdo_oci       soap        xmlwriter
31 exif        mbstring   pdo_odbc      sockets     xsl
32 mcrypt      pdo_pgsql  spl           zip         standard
33 fileinfo    mssql      pdo_sqlite    sqlite      zlib
34 filter      mysql      pgsql         sqlite3
35 ftp         mysqli     phar
36 "
37 sleep 0.1
38 read -p "Please Input ext name: " PHP_EXT
39 
40 TOP=$(cd $(dirname $0)/.. && pwd)
41 
42 if [ ! -f /usr/bin/gcc ]; then
43     yum install -y gcc gcc-c++ make autoconf libtool-ltdl-devel \
44         gd-devel freetype-devel libxml2-devel libjpeg-devel \
45         libpng-devel openssl-devel curl-devel patch \
46         libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2
47 fi
48 
49 if [ -d $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT ]; then
50     cd $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT
51 else
52     cd /tmp
53     if [ ! -d php-$PHP_VER ]; then
54       wget -c http://dl.wdlinux.cn:5180/soft/php-$PHP_VER.tar.gz
55       tar zxvf php-$PHP_VER.tar.gz
56     fi
57 fi
58 
59 if [ ! -d php-$PHP_VER/ext/$PHP_EXT ]; then
60   echo "Ext no fount!!"
61   exit
62 fi
63 
64 cd php-$PHP_VER/ext/$PHP_EXT
65 /www/wdlinux/php/bin/phpize
66 ./configure --with-php-config=/www/wdlinux/php/bin/php-config
67 make
68 [ $? != 0 ] && exit
69 make install
70 echo 
71 grep -q "$ext_dir" /www/wdlinux/etc/php.ini
72 if [ $? != 0 ]; then
73     echo '' >> /www/wdlinux/etc/php.ini
74     echo "extension_dir=/www/wdlinux/php/lib/php/extensions/$ext_dir" >> /www/wdlinux/etc/php.ini
75 fi
76 grep "$PHP_EXT.so" /www/wdlinux/etc/php.ini
77 if [ $? != 0 ]; then
78     echo '' >> /www/wdlinux/etc/php.ini
79     echo "extension=$PHP_EXT.so" >> /www/wdlinux/etc/php.ini
80 fi
81 if [ -d /www/wdlinux/apache ]; then
82     service httpd restart
83 else
84     service nginxd restart
85 fi
86 echo 
87 echo "$PHP_EXT install is OK"
88 echo

上边链接中的脚本

下边脚本的要害流程:

1、让用户挑选php版本,然后采纳要设置的模块。

2、固然没有gcc先安装gcc,然后查询当前目录下的lanmp/php选取版本/etc下是否有选取的模块,若是没有则在/tmp目录下下载http://dl.wdlinux.cn:5180/soft/php-选择版本.tar.gz,然后解压后从中取扩展的模块(可在浏览器中打开看看能否下载下来,解压看看相关目录是否存在你要安装的模块,如果没有那就要另想办法了)。

3、config,make,make
install,然后修改php.ini文件中的配置,最后重启服务器。

而对于当前须要来说,不适用的地点有如下:

1、当前lanmp4.1中php的本子为5.3.29而不是5.3.27,所以必须修改为5.3.29

2、假使要按装pdo_odbc,要求首先安装unixODBC,config时也要参预此参数。否则安装时会出现如下错误:

checking for selected PDO ODBC flavour... configure: error: Unknown ODBC flavour /usr/local/unixODBC
                            include and lib dirs are looked for under 'dir'.
                            'flavour' can be one of:  ibm-db2, iODBC, unixODBC, generic
                            If ',dir' part is omitted, default for the flavour
                            you have selected will used. e.g.:
                              --with-pdo-odbc=unixODBC
                            will check for unixODBC under /usr/local. You may attempt
                            to use an otherwise unsupported driver using the "generic"
                            flavour.  The syntax for generic ODBC support is:
                              --with-pdo-odbc=generic,dir,libname,ldflags,cflags
                            When build as shared the extension filename is always pdo_odbc.so

上面的错误音信也交给解决办法了,近年来看材料接纳的是用unxiODBC(其他的未测试)。unxiODBC安装格局如下,参考资料(资料中路径对于大家的需要来说适合):

1、官网下载最新版本(没有找到npm,所以直接编译安装,也曾尝试过yum安装,纵然能安装成功,但出于路线不对,依旧造成pdo_odbc不可以安装成功):

wget http://www.unixodbc.org/unixODBC-2.3.4.tar.gz

2、然后解压:

tar zxvf unixODBC-2.3.4.tar.gz

3、cd到解压目录,然后config,注意与参考资料中的差别,include、lib等途径必须是在/usr/local下才得以,否则在设置pdo_odbc时会出现谬误

./configure --prefix=/usr/local/unixODBC --includedir=/usr/local/include --libdir=/usr/local/lib -bindir=/usr/local/bin --sysconfdir=/usr/local/etc

如果unixODBC的门道不科学,在安装pdo_odbc时会出现似乎错误:

configure: error: Cannot find header file(s) for pdo_odbc

4、make编译安装

make && make install

上述unxiODBC安装达成,然后正式安装pdo_odbc的台本(本脚本只适用与pdo_odbc模块的装置)如下(未做任何的优化,只是微微修改了下):

sqlite 3sqlite 4

 1 #!/bin/bash
 2 # ext install scripts
 3 # Author:sendsky
 4 # Url http://www.baiup.com/
 5 
 6 echo "Select php version:
 7     1 php-5.3.29
 8 "
 9 sleep 0.1
10 read -p "Please Input 1: " PHP_VER_ID
11 if [[ $PHP_VER_ID == 1 ]]; then
12     PHP_VER="5.3.29"
13     ext_dir="no-debug-non-zts-20090626"
14 else
15     echo "invalid id!!"
16 fi
17 echo "Select php ext:
18 bcmath      gd         mysqlnd       posix       sybase_ct
19 bz2         gettext    oci8          pspell      sysvmsg
20 calendar    gmp        odbc          readline    sysvsem
21 com_dotnet  hash       openssl       recode      sysvshm
22 ctype       iconv      pcntl         reflection  tidy
23 curl        imap       pcre          session     tokenizer
24 date        interbase  pdo           shmop       wddx
25 dba         intl       pdo_dblib     simplexml   xml
26 dom         json       pdo_firebird  skeleton    xmlreader
27 enchant     ldap       pdo_mysql     snmp        xmlrpc
28 ereg        libxml     pdo_oci       soap        xmlwriter
29 exif        mbstring   pdo_odbc      sockets     xsl
30 mcrypt      pdo_pgsql  spl           zip         standard
31 fileinfo    mssql      pdo_sqlite    sqlite      zlib
32 filter      mysql      pgsql         sqlite3
33 ftp         mysqli     phar
34 "
35 sleep 0.1
36 read -p "Please Input ext name: " PHP_EXT
37 
38 TOP=$(cd $(dirname $0)/.. && pwd)
39 
40 if [ ! -f /usr/bin/gcc ]; then
41     yum install -y gcc gcc-c++ make autoconf libtool-ltdl-devel \
42         gd-devel freetype-devel libxml2-devel libjpeg-devel \
43         libpng-devel openssl-devel curl-devel patch \
44         libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2
45 fi
46 
47 if [ -d $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT ]; then
48     cd $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT
49 else
50     cd /tmp
51     if [ ! -d php-$PHP_VER ]; then
52       wget -c http://dl.wdlinux.cn:5180/soft/php-$PHP_VER.tar.gz
53       tar zxvf php-$PHP_VER.tar.gz
54     fi
55 fi
56 
57 if [ ! -d php-$PHP_VER/ext/$PHP_EXT ]; then
58   echo "Ext no fount!!"
59   exit
60 fi
61 
62 cd php-$PHP_VER/ext/$PHP_EXT
63 /www/wdlinux/php/bin/phpize
64 ./configure --with-php-config=/www/wdlinux/php/bin/php-config --with-pdo-odbc=unixODBC
65 make
66 [ $? != 0 ] && exit
67 make install
68 echo 
69 grep -q "$ext_dir" /www/wdlinux/etc/php.ini
70 if [ $? != 0 ]; then
71     echo '' >> /www/wdlinux/etc/php.ini
72     echo "extension_dir=/www/wdlinux/php/lib/php/extensions/$ext_dir" >> /www/wdlinux/etc/php.ini
73 fi
74 grep "$PHP_EXT.so" /www/wdlinux/etc/php.ini
75 if [ $? != 0 ]; then
76     echo '' >> /www/wdlinux/etc/php.ini
77     echo "extension=$PHP_EXT.so" >> /www/wdlinux/etc/php.ini
78 fi
79 if [ -d /www/wdlinux/apache ]; then
80     service httpd restart
81 else
82     service nginxd restart
83 fi
84 echo 
85 echo "$PHP_EXT install is OK"
86 echo

专业安装的脚本

内需留意的是与参考脚本区其余是php版本的改观和config配置中中进入了–with-pdo-odbc=unixODBC,还有本脚本只适用与pdo_odbc模块的设置,其他模块没有安装过,config的参数可能要求修改。

上述脚本起名pdo_odbc.sh,放到linux服务器下,然后运行:

sh pdo_odbc.sh

按照步骤填写,正常的话会设置成功,然后查看下phpinfo()是否安装成功。

sqlite 5

如上就是安装进程,wdlinux论坛中有别的类似pdo_mysql等任何扩展的shell脚本,可以下载下来打开查看其安装格局步骤来参照修改,再度提醒本脚本只适用于lanmp4.1环境下的php5.3.29版本下pdo_odbc模块安装,别的分化的则必要修改集成环境路径、版本、编译参数等才能正常运转。


此起彼伏,仍旧太年轻气盛,在实质上采纳中打脸了,因为在linux下唯有pdo_odbc是分外的,还须求有access相关的驱动,在windows下得以用类似DRIVER={Microsoft
Access Driver
(*.mdb)}来做客,可是在linux下是充裕的,近日经过搜索相关资料发现可用的有三种:一个是MDBTools
一个是Easysoft ODBC-Access
,参照这个,mdb
tools免费,easysoft收费而且价格不菲。

下边只大体说下mdbtools,其github地址点这里,可以自己下载编译(编译种种报错,缺乏文件等,自行检索),也足以用yum安装(yum
install
mdbtools),安装到位后,需求找到libmdbodbc.so.1类似的文本的岗位,不相同版本后缀可能两样,例如0.5版本的是libmdbodbc.so.0,make安装后测试存在/usr/lib64文件夹下,然后可以参见那篇小说来设置:

在/usr/local/etc下找到odbcinst.ini文本(上方安装时设定的目录):

[MdbTools]
Description = MyDriver Driver for MyDBMS
Driver      = /usr/lib64/libmdbodbc.so.0
Setup       = 
FileUsage   = 1
UsageCount  = 1

sqlite,同目录下设定odbc.ini文件

[MyDsn]
Description = The Source of My Data
Driver      = MdbTools(这个是上面文件配置中括号的名称)
ServerName  = localhost(地址)
Database    = (你的Access文件路径)
UserName    = (用户名)
Password    = (密码)

然后可以用:

new PDO(odbc:Driver=MyDsn;DBQ=access路径名称;)//这个MyDsn是odbc.ini文件中中括号的名称
new PDO(odbc:DSN=MyDsn;DBQ=access路径名称;)

下边三种自我用第二个一般可以用isql -v一声令下测试能联通,具体应用时请再寻找查询吧,说实话到那里没有继承了,废弃了,因为mdbtools只帮忙固定名称的数据库,而大家的须要是数据名称随时变动的,尽管配置好也没发适用,参照那么些问题。最后大家的缓解方法是在另一个windows服务器中远程链接linux数据库来举行这么些读取access数据库的布置任务的操作。后续windows下的读取操作可以看另一篇文章

如上,linux下读取access分外不自己,唉!

网站地图xml地图