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

编译模块不求人,编译助手诞生支持curl,memcache,bcmath,pdo_mysql等,主要是参照这个,但是这个可能是旧的lanmp版本的并不全适用,但可以参照其原理,其shell脚本如下:

  1. #!/bin/bash
  2. # ext install scripts
  3. # Author:sendsky
  4. # Url http://www.baiup.com/
  5.  
  6. echo "Select php version:
  7. php-5.2. (default)
  8. php-5.3.
  9. "
  10. sleep 0.1
  11. read -p "Please Input 1,2: " PHP_VER_ID
  12. if [[ $PHP_VER_ID == ]]; 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 $)/.. && 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. [ $? != ] && exit
  69. make install
  70. echo
  71. grep -q "$ext_dir" /www/wdlinux/etc/php.ini
  72. if [ $? != ]; 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 [ $? != ]; 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、当前lanmp3.1中php的版本为5.3.29而不是5.3.27,所以必须修改为5.3.29

2、如果要按装pdo_odbc,需要首先安装unixODBC,config时也要加入此参数。否则安装时会出现如下错误:

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

上方的错误信息也给出解决方法了,目前看资料选择的是用unxiODBC(其余的未测试)。unxiODBC安装方法如下,参考资料(资料中路径对于我们的需求来说适合):

1、官网下载最新版本(没有找到npm,所以直接编译安装,也曾尝试过yum安装,虽然能安装成功,但由于路径不对,还是导致pdo_odbc无法安装成功):

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

2、然后解压:

  1. tar zxvf unixODBC-2.3..tar.gz

3、cd到解压目录,然后config,注意与参考资料中的区别,include、lib等路径必须是在/usr/local下才可以,否则在安装pdo_odbc时会出现错误

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

如果unixODBC的路径不正确,在安装pdo_odbc时会出现类似错误:

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

4、make编译安装

  1. make && make install

以上unxiODBC安装完成,然后正式安装pdo_odbc的脚本(本脚本只适用与pdo_odbc模块的安装)如下(未做其它的优化,只是稍微修改了下):

  1. #!/bin/bash
  2. # ext install scripts
  3. # Author:sendsky
  4. # Url http://www.baiup.com/
  5.  
  6. echo "Select php version:
  7. php-5.3.
  8. "
  9. sleep 0.1
  10. read -p "Please Input 1: " PHP_VER_ID
  11. if [[ $PHP_VER_ID == ]]; 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 $)/.. && 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. [ $? != ] && exit
  67. make install
  68. echo
  69. grep -q "$ext_dir" /www/wdlinux/etc/php.ini
  70. if [ $? != ]; 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 [ $? != ]; 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服务器下,然后运行:

  1. 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文件(上方安装时设定的目录):

  1. [MdbTools]
  2. Description = MyDriver Driver for MyDBMS
  3. Driver = /usr/lib64/libmdbodbc.so.
  4. Setup =
  5. FileUsage =
  6. UsageCount =

同目录下设定odbc.ini文件

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

然后可以用:

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

上面两种我用第二个貌似可以用isql -v命令测试能联通,具体使用时请再搜索查询吧,说实话到这里没有后续了,放弃了,因为mdbtools只支持固定名称的数据库,而我们的需求是数据名称随时变动的,即便配置好也没发适用,参照这个问题。最终我们的解决方法是在另一个windows服务器中远程链接linux数据库来执行这个读取access数据库的计划任务的操作。后续windows下的读取操作可以看另一篇文章

以上,linux下读取access非常不友好,唉!

Linux下LANMP集成环境中编译增加pdo_odbc模块的更多相关文章

  1. 连接Linux下 XAMPP集成环境中部署的禅道的数据库MariaDB

    用mysql数据库工具连接linuxmysql环境,但是会遇到连接失败的问题,如下所示: 这就需要涉及到另外的问题了,需要我们打开mysql的连接授权,具体的操作步骤如下: 1)在xshell里进入m ...

  2. 【Jenkins】linux下Jenkins集成ant进行编译并发送结果

    三个文章吧: 1 如何使用ant编译执行jmeter测试用例,并生成html报告 2 如何在Linux下搭建jenkins环境. 3 如何在Linux下搭建的jenkins中执行ant构建运行,并发送 ...

  3. Linux下xampp集成环境安装配置方法 、部署bugfree及部署禅道

    XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.XAMPP 是一个易于安装且包含 MySQL.PHP 和 Perl 的 Apache 发行版.XAMPP 的确非 ...

  4. 【xampp】windows下XAMPP集成环境中,MySQL数据库的使用

    在已经安装了XAMPP之后,会在你安装的目录下面出现”XAMPP“文件夹,这个文件夹就是整个XAMPP集成环境的目录. 我们先进入这个目录,然后会看到带有XAMPP标志的xampp-control.e ...

  5. windows下XAMPP集成环境中,MySQL数据库的使用

    https://jingyan.baidu.com/article/d169e186467a44436611d8b1.html

  6. Linux下搭建 Cocos2d-x-2.1.4 编译环境

    [tonyfield 2013.09.04 ] 参考 Linux下搭建 Cocos2d-x-2.1.4 编译环境 导入 HelloCpp 例程 1. Java 入口 HelloCpp.java Hel ...

  7. 在Linux下安装PHP过程中,编译时出现错误的解决办法

    在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...

  8. linux下搭建lamp环境以及安装swoole扩展

    linux下搭建lamp环境以及安装swoole扩展   一.CentOS 6.5使用yum快速搭建LAMP环境 准备工作:先更新一下yum源  我安装的环境是:apache2.2.15+mysql5 ...

  9. Linux下搭建PHP环境

    转载于: http://www.uxtribe.com/php/405.html 该站下有系列PHP文章. 在Linux下搭建PHP环境比Windows下要复杂得多.除了安装Apache,PHP等软件 ...

随机推荐

  1. Scrapy爬虫遇到 ‘Forbidden by robots.txt’的问题

    今天在爬知乎精华时,出现了‘Forbidden by robots.txt’的问题 了解到到scrapy在爬取设定的url之前,它会先向服务器根目录请求一个txt文件,这个文件规定了爬取范围 scra ...

  2. C#开发APP,ToolBar控件在Smobiler中的使用方式【附案例源码】——Smobiler移动开发平台

    控件说明 底部工具栏控件. 效果演示 其他效果 该界面为仿淘宝UI制作的一个简单的UI模板,源码获取方式请拉至文章末尾. 特色属性 属性 属性说明 Direction(相对布局) 容器主轴方向. Fl ...

  3. 一起学Android之Storage

    概述 在Android开发中,存储(Storage)的方式根据具体的需求不同而不同,例如数据对应用程序是私有的还是其他应用程序(和用户)可以访问的,以及保存数据需要多大的空间. 存储分类 主要的存储方 ...

  4. gitbook 入门教程之使用 gitbook-cli 开发电子书

    gitbook 生成电子书主要有三种方式: gitbook-cli 命令行操作,简洁高效,适合从事软件开发的相关人员. gitbook-editor 编辑器操作,可视化编辑,适合无编程经验的文学创作者 ...

  5. widows10 安装1803 版本后不能访问网络上的机器解决方法

    安装Windows10 1803 版本后,发现网络上的机器好多不见了. 使用 ping  可以ping 通,但是访问网络共享提示下面错误. 这个原因是1803 中没有安装 SMB1.0 协议.因为 S ...

  6. 微信小程序 base64 图片 canvas 画布 drawImage 实现

    在微信小程序中 canvas drawImage API 传入的第一个参数是 imageResource 图片资源路径,这个参数通常由从相册选择图片 wx.chooseImage 或 wx.getIm ...

  7. Linux 桌面玩家指南:03. 针对 Gnome 3 的 Linux 桌面进行美化

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  8. JNI实战(三):JNI 数据类型映射

    在JNI实战(二):Java 调用 C 我们了解了JNI的静态注册和动态注册.也知道我们应该使用动态注册来进行JNI函数与Java方法之间的映射. 示例的映射表的数组为如下: static JNINa ...

  9. [Swift]LeetCode1035.不相交的线 | Uncrossed Lines

    We write the integers of A and B (in the order they are given) on two separate horizontal lines. Now ...

  10. 一个比Spring Boot快44倍的Java框架!

    最近栈长看到一个框架,官方号称可以比 Spring Boot 快 44 倍,居然这么牛逼,有这么神奇吗?今天带大家来认识一下. 这个框架名叫:light-4j. 官网简介:A fast, lightw ...