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脚本如下:
#!/bin/bash
# ext install scripts
# Author:sendsky
# Url http://www.baiup.com/ echo "Select php version:
php-5.2. (default)
php-5.3.
"
sleep 0.1
read -p "Please Input 1,2: " PHP_VER_ID
if [[ $PHP_VER_ID == ]]; then
PHP_VER="5.3.27"
ext_dir="no-debug-non-zts-20090626"
else
PHP_VER="5.2.17"
ext_dir="no-debug-zts-20060613"
fi
echo "Select php ext:
bcmath gd mysqlnd posix sybase_ct
bz2 gettext oci8 pspell sysvmsg
calendar gmp odbc readline sysvsem
com_dotnet hash openssl recode sysvshm
ctype iconv pcntl reflection tidy
curl imap pcre session tokenizer
date interbase pdo shmop wddx
dba intl pdo_dblib simplexml xml
dom json pdo_firebird skeleton xmlreader
enchant ldap pdo_mysql snmp xmlrpc
ereg libxml pdo_oci soap xmlwriter
exif mbstring pdo_odbc sockets xsl
mcrypt pdo_pgsql spl zip standard
fileinfo mssql pdo_sqlite sqlite zlib
filter mysql pgsql sqlite3
ftp mysqli phar
"
sleep 0.1
read -p "Please Input ext name: " PHP_EXT TOP=$(cd $(dirname $)/.. && pwd) if [ ! -f /usr/bin/gcc ]; then
yum install -y gcc gcc-c++ make autoconf libtool-ltdl-devel \
gd-devel freetype-devel libxml2-devel libjpeg-devel \
libpng-devel openssl-devel curl-devel patch \
libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2
fi if [ -d $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT ]; then
cd $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT
else
cd /tmp
if [ ! -d php-$PHP_VER ]; then
wget -c http://dl.wdlinux.cn:5180/soft/php-$PHP_VER.tar.gz
tar zxvf php-$PHP_VER.tar.gz
fi
fi if [ ! -d php-$PHP_VER/ext/$PHP_EXT ]; then
echo "Ext no fount!!"
exit
fi cd php-$PHP_VER/ext/$PHP_EXT
/www/wdlinux/php/bin/phpize
./configure --with-php-config=/www/wdlinux/php/bin/php-config
make
[ $? != ] && exit
make install
echo
grep -q "$ext_dir" /www/wdlinux/etc/php.ini
if [ $? != ]; then
echo '' >> /www/wdlinux/etc/php.ini
echo "extension_dir=/www/wdlinux/php/lib/php/extensions/$ext_dir" >> /www/wdlinux/etc/php.ini
fi
grep "$PHP_EXT.so" /www/wdlinux/etc/php.ini
if [ $? != ]; then
echo '' >> /www/wdlinux/etc/php.ini
echo "extension=$PHP_EXT.so" >> /www/wdlinux/etc/php.ini
fi
if [ -d /www/wdlinux/apache ]; then
service httpd restart
else
service nginxd restart
fi
echo
echo "$PHP_EXT install is OK"
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、当前lanmp3.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..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模块的安装)如下(未做其它的优化,只是稍微修改了下):
#!/bin/bash
# ext install scripts
# Author:sendsky
# Url http://www.baiup.com/ echo "Select php version:
php-5.3.
"
sleep 0.1
read -p "Please Input 1: " PHP_VER_ID
if [[ $PHP_VER_ID == ]]; then
PHP_VER="5.3.29"
ext_dir="no-debug-non-zts-20090626"
else
echo "invalid id!!"
fi
echo "Select php ext:
bcmath gd mysqlnd posix sybase_ct
bz2 gettext oci8 pspell sysvmsg
calendar gmp odbc readline sysvsem
com_dotnet hash openssl recode sysvshm
ctype iconv pcntl reflection tidy
curl imap pcre session tokenizer
date interbase pdo shmop wddx
dba intl pdo_dblib simplexml xml
dom json pdo_firebird skeleton xmlreader
enchant ldap pdo_mysql snmp xmlrpc
ereg libxml pdo_oci soap xmlwriter
exif mbstring pdo_odbc sockets xsl
mcrypt pdo_pgsql spl zip standard
fileinfo mssql pdo_sqlite sqlite zlib
filter mysql pgsql sqlite3
ftp mysqli phar
"
sleep 0.1
read -p "Please Input ext name: " PHP_EXT TOP=$(cd $(dirname $)/.. && pwd) if [ ! -f /usr/bin/gcc ]; then
yum install -y gcc gcc-c++ make autoconf libtool-ltdl-devel \
gd-devel freetype-devel libxml2-devel libjpeg-devel \
libpng-devel openssl-devel curl-devel patch \
libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2
fi if [ -d $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT ]; then
cd $TOP/lanmp/php-$PHP_VER/ext/$PHP_EXT
else
cd /tmp
if [ ! -d php-$PHP_VER ]; then
wget -c http://dl.wdlinux.cn:5180/soft/php-$PHP_VER.tar.gz
tar zxvf php-$PHP_VER.tar.gz
fi
fi if [ ! -d php-$PHP_VER/ext/$PHP_EXT ]; then
echo "Ext no fount!!"
exit
fi cd php-$PHP_VER/ext/$PHP_EXT
/www/wdlinux/php/bin/phpize
./configure --with-php-config=/www/wdlinux/php/bin/php-config --with-pdo-odbc=unixODBC
make
[ $? != ] && exit
make install
echo
grep -q "$ext_dir" /www/wdlinux/etc/php.ini
if [ $? != ]; then
echo '' >> /www/wdlinux/etc/php.ini
echo "extension_dir=/www/wdlinux/php/lib/php/extensions/$ext_dir" >> /www/wdlinux/etc/php.ini
fi
grep "$PHP_EXT.so" /www/wdlinux/etc/php.ini
if [ $? != ]; then
echo '' >> /www/wdlinux/etc/php.ini
echo "extension=$PHP_EXT.so" >> /www/wdlinux/etc/php.ini
fi
if [ -d /www/wdlinux/apache ]; then
service httpd restart
else
service nginxd restart
fi
echo
echo "$PHP_EXT install is OK"
echo
正式安装的脚本
需要注意的是与参考脚本不同的是php版本的变更和config配置中中加入了--with-pdo-odbc=unixODBC,还有本脚本只适用与pdo_odbc模块的安装,其它模块没有安装过,config的参数可能需要修改。
上述脚本起名pdo_odbc.sh,放到linux服务器下,然后运行:
sh pdo_odbc.sh
按照步骤填写,正常的话会安装成功,然后查看下phpinfo()是否安装成功。
以上就是安装过程,wdlinux论坛中有其它类似pdo_mysql等其它扩展的shell脚本,可以下载下来打开查看其安装方式步骤来参照修改,再次提醒本脚本只适用于lanmp3.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.
Setup =
FileUsage =
UsageCount =
同目录下设定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非常不友好,唉!
Linux下LANMP集成环境中编译增加pdo_odbc模块的更多相关文章
- 连接Linux下 XAMPP集成环境中部署的禅道的数据库MariaDB
用mysql数据库工具连接linuxmysql环境,但是会遇到连接失败的问题,如下所示: 这就需要涉及到另外的问题了,需要我们打开mysql的连接授权,具体的操作步骤如下: 1)在xshell里进入m ...
- 【Jenkins】linux下Jenkins集成ant进行编译并发送结果
三个文章吧: 1 如何使用ant编译执行jmeter测试用例,并生成html报告 2 如何在Linux下搭建jenkins环境. 3 如何在Linux下搭建的jenkins中执行ant构建运行,并发送 ...
- Linux下xampp集成环境安装配置方法 、部署bugfree及部署禅道
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.XAMPP 是一个易于安装且包含 MySQL.PHP 和 Perl 的 Apache 发行版.XAMPP 的确非 ...
- 【xampp】windows下XAMPP集成环境中,MySQL数据库的使用
在已经安装了XAMPP之后,会在你安装的目录下面出现”XAMPP“文件夹,这个文件夹就是整个XAMPP集成环境的目录. 我们先进入这个目录,然后会看到带有XAMPP标志的xampp-control.e ...
- windows下XAMPP集成环境中,MySQL数据库的使用
https://jingyan.baidu.com/article/d169e186467a44436611d8b1.html
- Linux下搭建 Cocos2d-x-2.1.4 编译环境
[tonyfield 2013.09.04 ] 参考 Linux下搭建 Cocos2d-x-2.1.4 编译环境 导入 HelloCpp 例程 1. Java 入口 HelloCpp.java Hel ...
- 在Linux下安装PHP过程中,编译时出现错误的解决办法
在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...
- linux下搭建lamp环境以及安装swoole扩展
linux下搭建lamp环境以及安装swoole扩展 一.CentOS 6.5使用yum快速搭建LAMP环境 准备工作:先更新一下yum源 我安装的环境是:apache2.2.15+mysql5 ...
- Linux下搭建PHP环境
转载于: http://www.uxtribe.com/php/405.html 该站下有系列PHP文章. 在Linux下搭建PHP环境比Windows下要复杂得多.除了安装Apache,PHP等软件 ...
随机推荐
- Java虚拟机三:OutOfMemoryError异常分析
根据Java虚拟机规范,虚拟机内存中除过程序计数器之外的运行时数据区域都会发生OutOfMemoryError(OOM),本文将通过实际例子验证分析各个数据区域OOM的情况.为了更贴近生产,本次所有例 ...
- 海康相机SDK二次开发只有视频无声音问题
海康SDK相信做企业开发的的同仁,在项目中经常会用到,毕竟使用范围这么广. 本次就开发遇到的奇葩问题来说明一下我们的解决方案. 场景 虽然海康有4200客户端,但是对于高度定制化的项目,肯定不能再使用 ...
- 全球排名第一的开源ERP Odoo v12 最新一键安装体验版正式发布
引言 Odoo 12.0是目前全球Odoo社区最新推出的产品版本代号,该产品具有划时代的意义,增加了如互联网级的知识库网盘功能.工业互联网的IOT设备矩阵管控功能,全新的Python Sass前端引擎 ...
- 用SQL将JSON数据输出表值数据
自己练手写了一个将JSON数据输出成表值数据的存储过程 存储过程代码 CREATE PROC Proc_JsonConvertTable(@JSON VARCHAR(MAX)) AS --JSON测试 ...
- 微信小程序 写一个获取验证码 及setInterval 使用基本方法
<!--index.wxml--> <view class="container"> <view class="container_cont ...
- select下拉框的探索(<option></option>标签中能嵌套使用其它标签吗)
select标签大家应该经常用到,有个问题可能没怎么注意过, select标签里面的option标签可以嵌套其它标签吗,比如i,span标签等? 经本人测试,答案是:可以嵌套其它标签,但审查元素会 ...
- 分布式基础通信协议:paxos、totem 和 gossip(转载)
背景: 在分布式中,最难解决的一个问题就是多个节点间数据同步问题.为了解决这样的问题,涌现出了各种奇思妙想.只有在解决了如何进行信息同步的基础之上才衍生出形形色色的应用.这里开始介绍几种分布式通信协议 ...
- 谈谈axios配置请求头content-type
现在前端开发中需要通过Ajax发送请求获取后端数据是很普遍的一件事情了,鉴于我平时在撸码中用的是vue技术栈,今天这里来谈谈我们常用的发Ajax请求的一个插件-axios. > 现在网上可能发送 ...
- 机器学习之决策树三-CART原理与代码实现
决策树系列三—CART原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9482885.html ID ...
- MySQL InnoDB 修改表列Online DDL
概述 一般来说数据库结构一经设计,不能轻易更改,因为更改DDL(Data Definition Language)操作代价很高,所以在进行数据库结构设计时需要谨慎. 但是业务发展是未知的,特别是那些变 ...